백엔드/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);
    }