🎉 声明式 HTTP JAVA 客户端 | CoApi 1.6.6 发布
CoApi - 同时支持响应式编程和同步编程模型的 HTTP 客户端
更新内容
- 特性: 新增
BearerTokenFilter
过滤器,以支持自动认证、注入BearerToken
到请求头。 - 特性: 新增
HeaderSetFilter
过滤器,以支持自定义请求头。 - 特性: 新增
ExpirableTokenProvider
过滤器,以支持Token
过期后的自动重新刷新。 - 特性: 支持在
CoApiProperties
自定义baseUrl
。 - 特性: 仅当请求头中不存在
KEY
时才设置请求头值。 - 特性: 支持根据定义判断是否添加负载均衡拦截器
- 特性:
WebClientFactoryBean
支持自动注入负载均衡过滤器 - 依赖: 升级
org.springframework.boot:spring-boot-dependencies
版本v3.3.1
- 依赖: 升级
org.springframework.cloud:spring-cloud-dependencies
版本v2023.0.2
- 依赖: 升级
org.jetbrains.dokka
版本v1.9.20
- 依赖: 升级
io.mockk:mockk
版本v1.13.11
- 依赖: 升级
kotlin
版本v2.0.0
- 依赖: 升级
detekt
版本v1.23.6
- 依赖: 升级
codecov/codecov-action
版本v4
- 依赖: 升级
gradle
版本v8.8
- 依赖: 升级
enricomi/publish-unit-test-result-action action
版本v2.16.1
简介
在 Spring Framework 6 中,引入了全新的 HTTP 客户端 - Spring6 HTTP Interface。 该接口允许开发者通过使用 @HttpExchange
注解将 HTTP 服务定义为 Java 接口。
然而,当前版本尚未提供自动配置的支持,需要开发者自己实现配置。
虽然 Spring 生态中已经存在 Spring Cloud OpenFeign ,但它并未支持响应式编程模型。 为解决这个问题,Spring Cloud OpenFeign 推荐了替代方案 feign-reactive。然而,这个替代方案目前已处于不积极维护状态,并且不支持 Spring Boot 3.2.x。
CoApi 应运而生,它提供了类似于 Spring Cloud OpenFeign 的零样板代码自动配置的支持,同时支持响应式编程模型和同步编程模型。开发者只需定义接口,即可轻松使用。
安装
使用 Gradle(Kotlin) 安装依赖
implementation("me.ahoo.coapi:coapi-spring-boot-starter")
使用 Gradle(Groovy) 安装依赖
implementation 'me.ahoo.coapi:coapi-spring-boot-starter'
使用 Maven 安装依赖
<dependency> <groupId>me.ahoo.coapi</groupId> <artifactId>coapi-spring-boot-starter</artifactId> <version>${coapi.version}</version> </dependency>
使用
定义 CoApi
- 第三方接口
baseUrl
: 定义请求的基础地址,该参数可以从配置文件中获取,如:baseUrl = "${github.url}"
,github.url
是配置文件中的配置项 }
@CoApi(baseUrl = "${github.url}") public interface GitHubApiClient { @GetExchange("repos/{owner}/{repo}/issues") Flux<Issue> getIssue(@PathVariable String owner, @PathVariable String repo); }
配置文件:
github: url: https://api.github.com
定义 CoApi
- 客户端负载均衡
@CoApi(serviceId = "github-service") public interface ServiceApiClient { @GetExchange("repos/{owner}/{repo}/issues") Flux<Issue> getIssue(@PathVariable String owner, @PathVariable String repo); }
使用 CoApi
@RestController class GithubController( private val gitHubApiClient: GitHubApiClient, private val serviceApiClient: ServiceApiClient ) { @GetMapping("/baseUrl") fun baseUrl(): Flux<Issue> { return gitHubApiClient.getIssue("Ahoo-Wang", "CoApi") } @GetMapping("/serviceId") fun serviceId(): Flux<Issue> { return serviceApiClient.getIssue("Ahoo-Wang", "CoApi") } }
案例参考
服务提供者
TodoApi
: 规定了客户端消费方与服务提供者之间的共同契约,旨在防范重复冗余定义的风险,同时消除了服务提供者实现与客户端 SDK 的不一致性。TodoClient
: 客户端消费方通过TodoClient
访问服务提供者的 API。TodoController
: 服务提供者负责实现TodoApi
接口。
定义 API
@HttpExchange("todo") interface TodoApi { @GetExchange fun getTodo(): Flux<Todo> }
定义 Client
@CoApi(serviceId = "provider-service") interface TodoClient : TodoApi
实现 API
@RestController class TodoController : TodoApi { override fun getTodo(): Flux<Todo> { return Flux.range(1, 10) .map { Todo("todo-$it") } } }
服务消费者
服务消费者通过 @EnableCoApi
注解开启 CoApi
的自动配置。
@EnableCoApi(clients = [TodoClient::class]) @SpringBootApplication class ConsumerServer
@RestController class TodoController(private val todoClient: TodoClient) { @GetExchange fun getProviderTodo(): Flux<Todo> { return todoClient.getTodo() } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
🎉 领域驱动设计 - 模型即服务 | Wow 3.9.8 发布
领域驱动|事件驱动|测试驱动|声明式设计|响应式编程|命令查询职责分离|事件溯源 官方文档:https://wow.ahoo.me/ 更新内容 特性(query):SortDsl支持嵌套语法 依赖(core): 更新me.ahoo.cosid:cosid-bom到v2.9.1 依赖(doc): 更新vitepress到v1.3.0 依赖(opentelemetry): 更新io.opentelemetry:opentelemetry-bom到v1.40.0 QueryDsl singleQuery { condition { deleted(false) nestedState() BinInventoryStateProperties.SKU_ID__ID eq request.skuId BinInventoryStateProperties.BIN__TYPE eq request.type BinInventoryStateProperties.QTY gt 0 } sort { nestedState() BinInventoryStateProper...
- 下一篇
橙单代码生成工具 3.0 正式版,启程迎接挑战
橙单3.0 首先感谢开源中国的平台,也感谢大家的阅读与关注。橙单赠人玫瑰,手有余香,希望我们的免费代码生成工具可以为更多的开发者带来更多的学习和休息时间。 创业维艰,在过去的一年中,我们团队在大家的帮助下和明确目标的指引下,非常艰难的走过来了。没有足够的资源,只有足够的热情和开发最好快开平台的动力,让我们从去年的今天 2.9 发布的时候,用了足足一年才迎来换代版本 3.0 的升级。这一执念来自于很早之前一次与朋友的交流,3.0 版本才是一款产品的真正第一版。 最新开源 参考我们的文档确保开箱即用和极少的 BUG。 全新技术栈 Boot3 + Vue3 + Flowable7 +Sa-Token + Mybatis-Flex / Mybatis-Plus。 在线表单和工作流的主体功能全部开源。 前端提供「高颜值」的表单编辑器和流程编辑器。 全新橙单 免费的代码生成,本质都是 CURD,但橙单可以支持「跨服务多表关联」级联增删改查的一键生成。 全新的网站设计,希望可以让更多的同行第一眼就能记住我们。 全新的文档设计,高颜值和极优质的阅读体验,授人以鱼不如授人以渔的文档内容。 全优的代码质量...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Mario游戏-低调大师作品
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能