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

SCHREIB UNS

* Pflichtfeld

SCHREIB UNS

* Pflichtfeld

Cookie-Einstellungen

Diese Website verwendet Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und Zugriffe auf die Website zu analysieren. Zudem werden Informationen zu Ihrer Verwendung der Website an Partner für soziale Medien, Werbung und Analysen weitergegeben. Die Partner führen diese Informationen möglicherweise mit weiteren Daten zusammen, die Sie ihnen bereitgestellt haben oder die sie im Rahmen Ihrer Nutzung der Dienste gesammelt haben.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. Dort können Sie nachträglich auch Ihre Cookie-Einstellungen ändern.

contact icon

Kontakt aufnehmen