DevOps研发效能
媒体矩阵
开源中国APP
授权协议 Apache
开发语言 Kotlin 查看源码 »
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发网络工具包
开源组织
地区 不详
投 递 者 不详
适用人群 未知
收录时间 2024-01-19

软件简介

CoApi 是同时支持响应式编程和同步编程模型的 HTTP 客户端。

在 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")
    }
}

案例参考

Example

服务提供者

Example-Provider

  • 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")
            }
    }
}

服务消费者

Example-Consumer

服务消费者通过 @EnableCoApi 注解开启 CoApi 的自动配置。

@EnableCoApi(apis = [TodoClient::class])
@SpringBootApplication
class ConsumerServer
@RestController
class TodoController(private val todoClient: TodoClient) {

    @GetExchange
    fun getProviderTodo(): Flux<Todo> {
        return todoClient.getTodo()
    }
}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
发表了资讯
2024/09/05 12:25

CoApi v1.6.9 发布,HTTP 客户端

CoApi v1.6.9 已经发布,HTTP 客户端。 更新内容 依赖: 升级 org.springframework.boot:spring-boot-dependencies 版本 v3.3.3 依赖: 升级 org.springframework.cloud:spring-cloud-dependencies 版本 v2023.0.3 依赖: 升级 io.mockk:mockk 版本 v1.13.12 依赖: 升级 kotlin 版本 v2.0.20 依赖: 升级 gradle 版本 v8.10 依赖: 升级 org.hamcrest:hamcrest 版本 v3 详情查看:https://gitee.com/AhooWang/CoApi/releases/v1.6.9...

0
3
发表了资讯
2024/07/10 09:26

🎉 声明式 HTTP JAVA 客户端 | CoApi 1.6.6 发布

CoApi - 同时支持响应式编程和同步编程模型的 HTTP 客户端 更新内容 特性: 新增 BearerTokenFilter 过滤器,以支持自动认证、注入 BearerToken 到请求头。 特性: 新增 HeaderSetFilter 过滤器,以支持自定义请求头。 特性: 新增 ExpirableTokenProvider 过滤器,以支持 Token 过期后的自动重新刷新。 特性: 支持在 CoApiProperties 自定义 baseUrl。 特性: 仅当请求头中不存在 KEY 时才设置请求头值。 特性: 支持根据定义判断是...

0
4
发表了资讯
2024/01/24 15:13

🎉 声明式 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 接口。 然而,当前版本...

0
4
发表了资讯
2024/01/20 12:51

🎉 响应式 HTTP JAVA 客户端 | CoApi 0.6.0 发布

CoApi - 同时支持响应式编程和同步编程模型的 HTTP 客户端 更新内容 特性: 支持将 URI 作为请求参数,以覆写请求地址 特性: 支持配置 scan packages,以支持自动注入该包下的 CoApi 接口 依赖: 升级 org.springframework.boot:spring-boot-dependencies 到 v3.2.2 简介 在 Spring Framework 6 中,引入了全新的 HTTP 客户端 - Spring6 HTTP Interface。 该接口允许开发者通过使用 @HttpExchange 注解将 HTTP 服务定义为 Java 接...

0
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
8 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部