Spring Boot休息模板最佳实践

问题描述 投票:1回答:1

我找不到我的想法的可靠答案,所以我在这里试试运气(顺便说一句,我使用的是Spring Boot 2.1、2.2,使用的是Spring 5.x):

因此,在使用RestTemplate时,我首先想到的是通过RestTemplateBuilder进行构建,尽管在简单的情况下,例如仅使用带参数的调用而没有特殊的自定义内容,可能是通过new RestTemplate()进行了手动初始化也足够好。

但是,当谈到一个班级应该有多少个RestTemplate实例时,我找不到有根据的建议。例如以下用例:“服务需要联系多个外部端点,这些端点可能需要也可能不需要类似的设置,例如超时,基本身份验证等。”

现在我有多个选项(要使用具有单个RestTemplateFQDN端点或每个端点有多个rest模板实例的单个java类:

  • 一个包含键映射的单个Java类->每个端点的rest模板实例-这种最小的方法使@RestClientTest更加复杂,因为开箱即用的是java.lang.IllegalStateException: Unable to use auto-configured MockRestServiceServer since MockServerRestTemplateCustomizer has been bound to more than one RestTemplate,可以固定它,但是测试过于复杂。
  • 每个其余模板都有多个java类,这在某种程度上是关注点分离,@RestClientTest可以直接使用,但是我们可能有太多类在做相同的事情,因为也许并非所有不同的端点真的需要不同的处理方式。仍然具有MockRestServiceServer限制使我认为这是正确的事情,每个Java类使用一个RestTemplate
  • (已修改的上项目点)仍对每个java类使用单个RestTemplate,但不是对每个端点,而是对每个唯一的端点集。现在,这是另一个最佳实践问题。端点何时如此靠近,可以由单个RestTemplate提供服务?
    • 如果root uri相同,例如https://example.com,然后是rest.exchange("/something", ...)rest.exchange("/somethingElse", ...),而呼叫转到https://example.com/somethinghttps://example.com/somethingElse
    • 如果响应处理是相同的,即使调用必须转到https://example.com/somethinghttps://someotherexample.com/somethingElse,则在使用rest.exchange("https://example.com/something", ...)rest.exchange("https://someotherexample.com/somethingElse", ...)时也没有root uri
  • 其他组合

[您认为伙计们,您遵循一些最佳实践吗,如果可以,请争论clean/minimal codeseparation of concernssimple testing等?

spring spring-boot resttemplate
1个回答
-1
投票

大多数标准应用程序都为Rest Consuming操作实现RestTemplate。

rest.exchange("https://example.com/something",...)

相反,您应该

  • URL不应直接提及,它可以存储为静态字符串,并在其余调用中调用该字符串并引用该URL。
public static String SOME_STRING_URL = "https://example.com/something";
rest.exchange(SOME_STRING_URL,...);
  • 或者,如果您想在运行时中提及URL,则只需在application.properties填充中提及键,然后在此处引用该URL,以便您可以轻松地在运行时本身上切换剩余消耗URL。

应用程序属性

rest.some-dynamic-url = "https://example.com/something"
© www.soinside.com 2019 - 2024. All rights reserved.