백엔드/java
Open Feign
콤비네이션피자라지
2024. 12. 26. 18:19
Concept
"Making API clients easier"
Retrofit, JAXRS-2.0, WebScoekt 에 영감을 받아서 제작된 자바 클라이언트 라이브러리 입니다.
Netflix Denominator를 Http API 에 조금더 쉽게 매핑하는것을 시작으로 탄생하게 되었습니다.
Why Feign?
feign은 cxf, jersey를 사용하여 Rest, Soap 서비스를 제공 합니다.
손쉽게 http api code를 작성할 수 있고, 커스텀 인코딩/디코딩, 에러 핸들링을 지원합니다.
How To Work?
어노테이션 기반으로 동작합니다. 여러 템플릿을 제공하며 request, argument에 사용가능합니다.
텍스트 기반의 API를 만들기는 어렵지만 api작업 진행중 반복되는 코드 작성을 줄여줍니다.
유닛테스트 또한 간단화 할 수 있습니다.
Support
v10.x : java 8이상 필요, jdk6 이하 버전은 v9.x 를 사용바랍니다.
Use Case
Gradle
implementation 'io.github.openfeign:feign-core:13.5'
implementation 'io.github.openfeign:feign-gson:9.4.0' // decoding 위해 추가
Client
import feign.Param;
import feign.RequestLine;
public interface FeignTestClient {
@RequestLine("GET /feign/{productId}")
Product getProduct(@Param("productId") String productId);
@RequestLine("POST /feign")
void saveProduct(Product product);
}
Server
@RestController
public class FeignTestController {
@GetMapping("/feign/{productId}")
public Product getProducts(@PathVariable String productId) {
return new Product(1L, BigDecimal.valueOf(350L));
}
@PostMapping("/feign")
public void saveProduct(Product product) {
System.out.println(product);
}
}
Test
public static void main(String[] args) {
FeignTestClient feignTestClient = Feign.builder()
.decoder(new GsonDecoder())
.target(FeignTestClient.class, "http://127.0.0.1:8080");
Product product = feignTestClient.getProduct("1");
System.out.println(product);
}