Feign使得 Java HTTP 客户端编写更方便。Feign 灵感来源于Retrofit、JAXRS-2.0和WebSocket。Feign最初是为了降低统一绑定Denominator到HTTP API的复杂度,不区分是否支持Restful。Feign旨在通过最少的资源和代码来实现和HTTP API的连接。通过可定制的解码器和错误处理,可以编写任意的HTTP API。

主要特点
- 定制化
- 提供多个接口
- 支持JSON格式的编码和解码
- 支持XML格式的编码和解码
工作机制
Feign通过配置注入一个模板化请求进行工作。只需在发送之前关闭它,参数就可以被直接的运用到模板中。然而这也限制了Feign,只支持文本形式的API,它可以在响应请求方面来简化系统。了解了这一点,这也非常容易进行你的单元测试转换。
基础示例
下面是标准Retrofit的典型用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
interfaceGitHub{
@RequestLine("GET /repos/{owner}/{repo}/contributors")
List<Contributor>contributors(@Param("owner")Stringowner,@Param("repo")Stringrepo);
}
staticclassContributor{
Stringlogin;
intcontributions;
}
publicstaticvoidmain(String...args){
GitHub github=Feign.builder()
.decoder(newGsonDecoder())
.target(GitHub.class,"https://api.github.com");
// Fetch and print a list of the contributors to this library.
List<Contributor>contributors=github.contributors("netflix","feign");
for(Contributor contributor:contributors){
System.out.println(contributor.login+" ("+contributor.contributions+")");
}
}
|
可定制
Feign在一些方面可以定制。举个简单的例子,你可以使用Feign.builder()来构建一个API 接口,包含你自定义的内容。例如:
|
interfaceBank{
@RequestLine("POST /account/{id}")
Account getAccountInfo(@Param("id")Stringid);
}
...
Bank bank=Feign.builder().decoder(newAccountDecoder()).target(Bank.class,"https://api.examplebank.com");
|
支持多种接口
Feign可以提供多种API 接口。这些都被定义为Target<T>(默认为 HardCodeTarget<T>)。它允许动态扩展,并且被修饰过的请求会被优先执行。
例如,以下部分可以修饰来自当前身份验证服务的URL和AUTH的每一个请求。
|
Feign feign=Feign.builder().build();
CloudDNS cloudDNS=feign.target(newCloudIdentityTarget<CloudDNS>(user,apiKey));
|
示例
Feign被应用于GitHub和维基百科客户端。相似的项目也同样在实践中运用了Feign。尤其是它的示例后台程序。
官方网站:https://github.com/Netflix/feign
开源地址:https://github.com/Netflix/feign
http://hao.jobbole.com/feign/
分享到:
相关推荐
Feign使用Jersey和CXF等工具为ReST或SOAP服务编写Java客户端。 此外,Feign允许您在诸如Apache HC之类的http库之上编写自己的代码。 Feign通过可自定义的解码器和错误处理功能,以最小的开销和代码将代码连接到http...
Feign 使得 Java HTTP 客户端编写更方便。Feign 灵感来源于 Retrofit, JAXRS-2.0 和 WebSocket,Feign 最初是为了降低统一绑定 Denominator 到 HTTP APIs 的复杂度,不管是否是 Restful 。基础使用:interface ...
Feign是Netflix公司开源的一款Java库,它使得创建HTTP客户端变得更加简单、直观。Feign的设计灵感来自于Retrofit和Apache HttpClient,但提供了更为简洁的接口,让开发者能够通过注解定义接口,实现远程服务调用。在...
Feign 简化了编写 Java HTTP 客户端的过程 Feign 是一个受Retrofit、JAXRS-2.0和WebSocket启发的 Java 到 HTTP 客户端绑定器。Feign 的首要目标是降低将Denominator统一绑定到 HTTP API 的复杂性,而不管ReSTfulness...
Feign是一个Java到HTTP客户端绑定程序,其主要... Feign使用了诸如Jersey和CXF之类的出色工具来为ReST或SOAP服务编写Java客户端。 它还使您可以在http库的顶部编写自己的代码,并以很少的开销将代码连接到http API。
Feign使用Jersey和CXF之类的工具为ReST或SOAP服务编写Java客户端。 此外,Feign允许您在诸如Apache HC之类的http库之上编写自己的代码。 Feign通过可定制的解码器和错误处理功能,以最小的开销和代码将代码连接到...
Feign是一个声明式的Web服务客户端库,它极大地方便了HTTP客户端的开发工作。Feign通过简单的接口定义和注解来完成HTTP请求的构建与发送,极大地提高了开发效率。 ##### 2.1 Feign的主要特点 1. **声明式接口**:...
Feign 是一个声明式的 HTTP 客户端,它使得编写 Web 服务客户端变得简单。这个“feign_v960依赖的jar包.rar”文件包含了 Feign 的版本 9.6.0 所需的 JAR 包,这些 JAR 包是用于构建 Java 应用程序并与其依赖的服务...
在"feign以XML格式传输-技术点eureka-feign-jackson.zip"这个项目中,我们关注的核心知识点是如何在Feign客户端中使用XML进行数据传输,并结合Jackson库将Java对象转换为XML格式。 首先,让我们深入理解Eureka。...
java开发学习
GRPC是一种高性能、开源的通用RPC框架,基于Google的Protocol Buffers(protobuf)协议和HTTP/2设计。它允许服务间进行高效的双向通信,支持多种编程语言,包括Java和Python。在本文中,我们将深入探讨如何在Java和...
Feign 的核心理念是通过接口定义来调用远程服务,类似于 Java 中的 RMI 或者 Spring 的 REST 客户端。下面我们将深入探讨 Feign 的相关知识点。 1. **声明式编程**:Feign 的一大特色就是它的声明式 API。在创建 ...
核心库: conjure-java-jaxrs-client:JAX-RS定义的服务接口的客户端 conjure-java-retrofit2-client:用于改造定义的服务接口的客户端 conjure-java-jersey-server:Dropwizard / Jersey服务器的配置库 :用于...
Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得简单,而Hystrix则是一个用于处理延迟和故障的库,通过断路器模式来防止服务雪崩,确保系统的稳定。 **Feign简介** Feign是基于NetFlix的一个声明式...
Feign是一个声明式Web服务客户端,它使得编写Web服务客户端变得简单,它的工作原理是通过创建一个接口并添加注解来定义服务接口,然后Feign会自动生成实现该接口的HTTP客户端。 在这个"SpringBoot使用Feign调用第三...
Feign允许开发者通过接口定义来调用其他服务,提供了类似Java的注解方式来指定HTTP请求的路径、方法、参数等。 整合Nacos和Feign,可以让服务间的调用更加简洁和高效: 1. 引入Spring Cloud Alibaba Nacos Config和...
Feign的设计灵感来源于Netflix的Feign库,它的主要目的是简化微服务之间的通信,使得开发者可以像定义接口一样调用远程服务,从而降低了服务消费者与提供者的耦合度。 在传统的Web Service(WebService)中,我们...
默认情况下,Feign使用Jackson库将Java对象序列化为JSON格式。 2. **解码器(Decoder)**:处理HTTP响应,将响应体反序列化为Java对象。同样,默认情况下,Feign使用Jackson反序列化JSON响应。 3. **RequestTemplate...
在Java端,我们需要一个HTTP客户端库来发送请求。Apache HttpClient是一个流行的选择,它提供了灵活且强大的功能来发送HTTP请求。以下是一个简单的示例,展示如何使用HttpClient发送POST请求: ```java import org....