Leichtgewichtige REST-Clients mit Feign

Leichtgewichtige REST-Clients mit Feign (Feign is fine)

Problem: Separate REST Clients für jede direkte Kommunikation

In der Microservices/REST-Welt wird für jede direkte Kommunikation zwischen Services ein eigener Client benötigt. Das Schreiben dieser Clients ist zwar einfach, aber wenig spannend, und führt außerdem zu Boilerplate-Code.

Lösung: Minimaler Codeeinsatz durch Feign in Spring

Der deklarative REST-client Feign erlaubt es in Spring-Applikationen, diese Aufgabe mit minimalem ­Codeeinsatz zu erledigen.

Vorteile / Features:

  • frei konfigurierbare Encoder/Decoder (JSON, XML, ...), Logger, Errorhandler und Interceptors (z.B. für OAuth)
  • kompatibel mit JAX-RS Annotationen, Spring Cloud, Hystrix, Spring MVC Annotationen, Spring Web HttpMessageConverter
  • unterstützt Load Balancing (mittels Ribbon und Eureka)
  • komplexere Clients können mit der Feign Builder API realisiert werden

Beispiel für einen Feign Client

@FeignClient(name = "coffeeMachineClient", configuration = Config.class, url = "${myUrl}")
public interface ICoffeeMachineCient {

    @RequestMapping(method = POST, path = "/coffees")
    CupOfCoffeeDTO createCoffee(@RequestHeader("userId") Id uId, CupOfCoffeeDTO request);

    @RequestMapping(method = GET, path = "/coffees")
    List<CupOfCoffeeDTO> getCoffees();

    @RequestMapping(method = GET, path = "/coffees/{id}")
    CupOfCoffeeDTO getCoffeeById(@RequestParam("id") String coffeeId);

    @RequestMapping(method = PUT, path = "/coffees/{id}")
    CupOfCoffeeDTO updateCoffee(@RequestParam("id") String id, CupOfCoffeeDTO request);

    @RequestMapping(method = DELETE, path = "/coffees/{id}")
    void deleteCoffee(@RequestParam("id") String id); //who would do this?
}
→ weniger als 15 Zeilen Code für einen kompletten CRUD-Client. Der Einsatz von Feign lohnt sich vor allem, wenn viele unterschiedliche Requests zu einem bestimmten Server notwendig sind. Achtung: Feign-Clients können nur mit Text-basierten Schnittstellen umgehen, nicht mit Binärdaten (z.B. Datei-Up/-Download)

Weiterführende Aspekte

---

Autor

Magnus S. / Software Architect / Business Division Automotive Bavaria

Lightweight REST Clients with Feign

Wir verwenden Cookies, um unsere Webseite für Sie zu optimieren. Mit dem Besuch unserer Webseite erklären Sie sich damit einverstanden. // Our website is using cookies to improve your experience. By continuing to browse the site, you are agreeing to our use of cookies.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. // For more information, please refer to our privacy policy.