使用Feign相比RestTemplate有哪些优缺点?

56

我知道Feign是一种声明式的工具,因此它抽象出了很多开发人员需要关注的细节。但是,在何时应该选择其中一种呢?尽管Feign是声明式的,但它在使用oAuth方面存在严重问题。在使用RestTemplate和Feign之间需要考虑哪些因素呢?

7个回答

35

Feign允许你抽象调用REST服务的机制。一旦配置和注释了Feign接口,你可以通过简单的Java函数调用来调用REST服务。实际上进行REST调用的实现是由Feign在运行时处理的。这意味着可以通过配置来配置实现,而不必更改业务逻辑代码。

通过仅在Java中更改Feign配置或使用属性,您可以添加编码/解码,日志记录并更改REST调用实现库。所有这些都只通过配置完成,而调用服务的业务逻辑保持不变。

由于Feign使用标准的Java接口,因此在单元测试期间也很容易对它们进行模拟。


23

有一些优点。

1.URLs没有硬编码。

2.你不必为Feign编写单元测试用例,因为没有需要测试的代码,但是你必须编写集成测试。

3.我们可以使用Eureka客户端ID而不是URL。

4.Feign处理了实际的代码。

5.Feign自动集成了Ribbon和Eureka。

6.Feign提供了一种非常简单的调用RESTful服务的方式。


4
虽然 Feign 具有许多优点,但我发现它的一个缺点是不支持基于缓存控制头的缓存。 - user1401472
2
RestTemplate可以使用@LoadBalanced来实现#3。 - James Gawron
it is not complete answer - Omid Rostami
3
请编辑并随意添加更多要点来回答。 - Alien

16

相比于使用 RestTemplate,使用 Feign 的优点之一是我们不需要编写任何实现来调用其他服务。因此,首先没有可测试的代码,所以没有必要编写任何单元测试。然而,建议编写集成测试。


7

RestTemplate 用于进行同步调用。使用 RestTemplate 时,URL 参数会以编程方式构建,并将数据发送到其他服务。在更复杂的场景中,我们需要深入了解 RestTemplate 提供的 HTTP API 的细节,甚至要了解更低层次的 API

Feign 是一个 Spring Cloud Netflix 库,用于提供对基于 REST 的服务调用的更高级抽象。 Spring Cloud Feign 基于声明式原则工作。使用 Feign 时,我们在客户端编写声明式 REST 服务接口,并使用这些接口来编写客户端程序。开发人员无需担心实现细节......


6

使用 Feign-client 比 RestTemplate 有很多优势。下面我将列举一些:

  1. 开发者无需担心实现细节,只需要创建抽象的 Feign 接口和几个注解,即可使用声明式编程。(如果您需要自定义配置,则需要编写一些代码)

  2. 使用 Spring Cloud Eureka 后,Ribbon 客户端负载均衡器将为 Feign 客户端提供支持。

  3. 无需担心单元测试,因为您没有要测试的实现细节。(这是有争议的)

  4. 支持 Feign 注解和 JAX-RS 注解。

  5. 与 Spring Cloud 高度兼容,易于配置(特别是与 Eureka 服务器注册表配合使用时)。

  6. 允许通过 @Configuration 类或应用程序属性配置 Feign 客户端。

  7. 允许添加拦截器。(可以通过 @Configuration 或应用程序属性添加拦截器,也可以使用 Spring Cloud 提供的拦截器。例如:BasicAuthRequestInterceptor)

  8. 支持 Hystrix 的回退机制。

  9. 日志记录。

  10. 错误处理。

如果您对 JPA 和其解决查询的方式着迷,那么 Feign 是一个不错的选择。Feign 可以很好地处理您的服务器请求。


3

我知道这是一个老问题,但在我看来,使用Feign客户端而不是Rest模板有以下主要优点:

  1. 开发人员除了编写Feign接口外,无需编写任何代码,因此不存在错误或单元测试的可能性。

  2. 不需要硬编码URL,在Eureka命名服务器的配合下,只需要服务名称ID即可调用服务。

  3. 自动提供与Eureka的负载平衡功能。


2

使用Feign相比RestTemplate的优势:

声明式方法:Feign提供了一种更加声明式的方法来定义和使用REST API客户端,可以使代码更易读,更易于维护。

与Eureka集成:Feign与Netflix Eureka集成,用于服务发现,在微服务架构中更容易构建和消费API。

更好的错误处理:Feign提供更好的错误处理,包括支持自定义错误处理和重试。

支持多种编码:Feign支持多种编码类型,包括JSON、XML和表单数据,而RestTemplate只支持JSON和XML。

使用Feign相比RestTemplate的缺点:

灵活性有限:Feign在定义和使用REST API客户端方面提供了一种更具观点的方法,这可能会在某些情况下限制灵活性。

对HTTP请求和响应的控制有限:Feign抽象了一些HTTP请求和响应的底层细节,这可能会使得在需要时难以控制和定制这些细节。

缺乏官方支持:Feign不是Spring的官方支持库,这可能是一些开发者或组织考虑的因素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接