🎉 声明式 HTTP JAVA 客户端 | CoApi 1.0.0 发布
CoApi - 同时支持响应式编程和同步编程模型的 HTTP 客户端
更新内容
- 特性: 新增
WebClientBuilderCustomizer
API,以支持自定义CoApi
WebClient.Builder
- 特性: 新增
RestClientBuilderCustomizer
API,以支持自定义CoApi
RestClient.Builder
简介
在 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(apis = [TodoClient::class]) @SpringBootApplication class ConsumerServer
@RestController class TodoController(private val todoClient: TodoClient) { @GetExchange fun getProviderTodo(): Flux<Todo> { return todoClient.getTodo() } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
通俗易懂了解 NJet LDAP 统一认证
NGINX 向云原生演进,All inOpenNJet 一.OpenNJet 认证功能介绍 该功能基于njet 的auth_request 指令,来支持第三方认证,该指令指定一个 uri , 在获取用户请求时,开启 subrequest 子请求,发送认证信息到该指定uri 进行鉴权认证,认证方式有: 1.本地认证 2.调用proxy_pass 调用第三方的认证接口。 3.直接访问认证服务器进行认证。ldap,radius,redis 如果返回2XX 则可以继续后需的资源访问。其他值则访问中断拒绝。返回值如下: 2XX 允许请求操作。 401 不正确授权 403 禁止访问 其他值,500错误 本文使用第二种方式, 使用lua 脚本,直接连接到ldap 服务器进行验证。 二.LDAP服务器搭建(ubuntu) Tyler’s Guides ComputingForGeeks 1.设置hostname sudo hostnamectl set-hostname http://ldap.example.com sudo vim /etc/hosts 192.168.18.50 http...
- 下一篇
Categraf 更多监控插件来了(v0.3.47 发版)
Categraf 一款监控数据采集器,内置几十种采集插件,最新版本 v0.3.47,changelog 如下: 1 oracle 插件去除cgo依赖,centos6.7上也可以进行oracle采集了 2 新增nats插件 3 新增tengine插件 4 新增bind插件 5 新增snmp_trap插件 6 snmp暴露更多可配置参数 7 snmp插件支持mibs文件、支持请求响应非同一个IP 8 snmp插件支持深信服sfTotalMemory格式采集 9 prometheus-agent 暴露更多wal控制参数 10 用ipmi exporter替换老的ipmi插件 11 redis插件支持slow log采集 12 prometheus-agent 支持重复指标处理(配置有开关) 13 log-agent支持更多参数和hash策略 14 ntp 支持设置timeout 15 writers支持写入https的后端 16 exec插件 支持正则匹配 感谢各位贡献者 @c88888 @katepangLiu @tanxiao1990 @liuqian1990 @Meepoljdx @n...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品