我知道Feign是一种声明式的工具,因此它抽象出了很多开发人员需要关注的细节。但是,在何时应该选择其中一种呢?尽管Feign是声明式的,但它在使用oAuth方面存在严重问题。在使用RestTemplate和Feign之间需要考虑哪些因素呢?
我知道Feign是一种声明式的工具,因此它抽象出了很多开发人员需要关注的细节。但是,在何时应该选择其中一种呢?尽管Feign是声明式的,但它在使用oAuth方面存在严重问题。在使用RestTemplate和Feign之间需要考虑哪些因素呢?
Feign允许你抽象调用REST服务的机制。一旦配置和注释了Feign接口,你可以通过简单的Java函数调用来调用REST服务。实际上进行REST调用的实现是由Feign在运行时处理的。这意味着可以通过配置来配置实现,而不必更改业务逻辑代码。
通过仅在Java中更改Feign配置或使用属性,您可以添加编码/解码,日志记录并更改REST调用实现库。所有这些都只通过配置完成,而调用服务的业务逻辑保持不变。
由于Feign使用标准的Java接口,因此在单元测试期间也很容易对它们进行模拟。
有一些优点。
1.URLs没有硬编码。
2.你不必为Feign编写单元测试用例,因为没有需要测试的代码,但是你必须编写集成测试。
3.我们可以使用Eureka客户端ID而不是URL。
4.Feign处理了实际的代码。
5.Feign自动集成了Ribbon和Eureka。
6.Feign提供了一种非常简单的调用RESTful服务的方式。
相比于使用 RestTemplate
,使用 Feign
的优点之一是我们不需要编写任何实现来调用其他服务。因此,首先没有可测试的代码,所以没有必要编写任何单元测试。然而,建议编写集成测试。
RestTemplate 用于进行同步调用。使用 RestTemplate 时,URL 参数会以编程方式构建,并将数据发送到其他服务。在更复杂的场景中,我们需要深入了解 RestTemplate 提供的 HTTP API 的细节,甚至要了解更低层次的 API。
Feign 是一个 Spring Cloud Netflix 库,用于提供对基于 REST 的服务调用的更高级抽象。 Spring Cloud Feign 基于声明式原则工作。使用 Feign 时,我们在客户端编写声明式 REST 服务接口,并使用这些接口来编写客户端程序。开发人员无需担心实现细节......
使用 Feign-client 比 RestTemplate 有很多优势。下面我将列举一些:
开发者无需担心实现细节,只需要创建抽象的 Feign 接口和几个注解,即可使用声明式编程。(如果您需要自定义配置,则需要编写一些代码)
使用 Spring Cloud Eureka 后,Ribbon 客户端负载均衡器将为 Feign 客户端提供支持。
无需担心单元测试,因为您没有要测试的实现细节。(这是有争议的)
支持 Feign 注解和 JAX-RS 注解。
与 Spring Cloud 高度兼容,易于配置(特别是与 Eureka 服务器注册表配合使用时)。
允许通过 @Configuration 类或应用程序属性配置 Feign 客户端。
允许添加拦截器。(可以通过 @Configuration 或应用程序属性添加拦截器,也可以使用 Spring Cloud 提供的拦截器。例如:BasicAuthRequestInterceptor)
支持 Hystrix 的回退机制。
日志记录。
错误处理。
如果您对 JPA 和其解决查询的方式着迷,那么 Feign 是一个不错的选择。Feign 可以很好地处理您的服务器请求。
我知道这是一个老问题,但在我看来,使用Feign客户端而不是Rest模板有以下主要优点:
开发人员除了编写Feign接口外,无需编写任何代码,因此不存在错误或单元测试的可能性。
不需要硬编码URL,在Eureka命名服务器的配合下,只需要服务名称ID即可调用服务。
自动提供与Eureka的负载平衡功能。
使用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的官方支持库,这可能是一些开发者或组织考虑的因素。