척하는 클라이언트는 멋지다

5213 단어 javawebdevapi
안녕하세요 여러분! :D 건강히 잘 지내고 계시길 바랍니다! 오늘 저는 외부 및 "내부"API 호출 모두에 대해 RestTemplates보다 Feign Clients를 선호하는 이유를 공유하고 싶습니다!

RestTemplates 작업을 할 때 URL을 저장하고 구성하는 좋은 방법을 찾지 못했습니다. 원래는 URL을 하드 코딩하고 이렇게 연결된 문자열을 추가합니다.

String requestParam = "?validation=" + VALIDATION_VARIABLE
String url = "http://somewebsite.com/some/api/path" + requestParam


왜 이것을 피하고 싶은지 생각할 수있는 몇 가지 이유가 있습니다! 하나는 식별자와 같은 민감한 변수를 처리할 때 보안 문제가 됩니다. 두 번째 API 요청에는 x개 이상의 요청 매개변수가 있어 작업하기가 악몽이 됩니다. 그 외에도 보기에 즐겁지 않습니다! 내 다음 접근 방식은 다음과 같이 application.properties/application.yml 파일에 내 URL과 민감한 요청 매개변수를 저장하는 것이었습니다.

env:
    urls:
        full-example-url: "http://somewebsite.com/some/api/path?every=%s&single=%s&request=%s&variable=%s


그런 다음 Java에서 문자열 형식 지정

@Value("${env.urls.full-example-url}")
String url;

public void someMethod() {
    String fullUrl = String.format(url, "every", "single", "request", "value")
}


이 두 가지 접근 방식은 모두 끔찍합니다. 두 번째로 API가 변경되거나 요구 사항이 변경되면 이러한 URL을 설정하는 방법을 파악하는 데 많은 시간이 소요됩니다. Java의 내장 URL 개체를 간략하게 살펴보았지만 동일한 결론에 도달했습니다. 작업하기가 지저분하고 성가시다. 이러한 URL을 처리하는 즐거운 방법이 있더라도 매퍼가 문자열 결과를 POJO 개체에 매핑하도록 요구하는 것이 저를 행복하게 만들지 못했습니다!

마침내 나는 @FeignClientOpen Feign 과 함께 사용해보기로 했다. 이 솔루션은 지금까지 내가 가장 만족하는 것입니다! 구경하다

@FeignClient(name = "example-feign-client", url = "${env.urls.example_api}", path="/api")
public interface ExampleFeignApi {

    @GetMapping(value = "/some/random/path")
    ResponseEntity<MyPOJO> getApiResponse(
        @RequestParam("sensitive_variables") String id,
        @RequestParam("whatever") Integer whatever,
        @RequestParam("lastone") String lastOne
    )

}


이 접근 방식을 사용하면 내 속성 파일에 저장해야 하는 유일한 항목은 기본 URL과 모든 민감한 변수입니다. URL 및 API 응답 매핑은 자동으로 처리됩니다. 요청에 무엇이 필요한지 매우 명확하며 Java 코드에서 이 메서드를 호출하면 자동 완성 힌트가 제공됩니다! 따라서 필요한 것이 무엇인지 추측하는 대신 작동하는 데 필요한 것이 무엇인지 문자 그대로 알려줍니다. 이 모든 것 외에도 커스텀RequestInterceptors과 같은 멋진 기능을 @Bean에 추가할 수 있습니다.

시도 해봐! 이 URL에 누락된 내용이 있으면 알려주세요! 나는 아직도 배울 것이 많다! :디

좋은 웹페이지 즐겨찾기