Feign

Feign 使编写 java http 客户端更容易

Feign 是受 Retrofit、JAXRS-2.0 和 WebSocket 启发的 Java 到 HTTP 客户端绑定器。

Feign 的第一个目标是降低将 Denominator 统一绑定到 HTTP API 的复杂性,而不管 ReSTfulness。

为什么是 Feign 而不是 X?

Feign 使用 Jersey 和 CXF 等工具为 ReST 或 SOAP 服务编写 Java 客户端。

此外,Feign 允许您在 Apache HC 等 http 库之上编写自己的代码。

Feign 通过可定制的解码器和错误处理以最小的开销和代码将您的代码连接到 http API,可以将其写入任何基于文本的 http API。

Feign是如何工作的?

Feign 的工作原理是将注释处理成模板化的请求。

在输出之前,参数以一种直接的方式应用于这些模板。

尽管 Feign 仅限于支持基于文本的 API,但它极大地简化了系统方面,例如重放请求。

此外,知道这一点,Feign 可以轻松地对您的转换进行单元测试。

功能概述

这是一张包含 feign 提供的当前关键功能的地图:

feature

基本例子

interface GitHub {
  @RequestLine("GET /repos/{owner}/{repo}/contributors")
  List<Contributor> contributors(@Param("owner") String owner, @Param("repo") String repo);

  @RequestLine("POST /repos/{owner}/{repo}/issues")
  void createIssue(Issue issue, @Param("owner") String owner, @Param("repo") String repo);

}

public static class Contributor {
  String login;
  int contributions;
}

public static class Issue {
  String title;
  String body;
  List<String> assignees;
  int milestone;
  List<String> labels;
}

public class MyApp {
  public static void main(String... args) {
    GitHub github = Feign.builder()
                         .decoder(new GsonDecoder())
                         .target(GitHub.class, "https://api.github.com");

    // Fetch and print a list of the contributors to this library.
    List<Contributor> contributors = github.contributors("OpenFeign", "feign");
    for (Contributor contributor : contributors) {
      System.out.println(contributor.login + " (" + contributor.contributions + ")");
    }
  }
}

参考资料

https://github.com/OpenFeign/feign