Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Declarative_Clients_in_Spring - JNation

Declarative_Clients_in_Spring - JNation

What is a declarative HTTP client vs an imperative one? Why are they useful and why should I care? We’ll talk about options that are available in the Spring Portfolio and what is coming on the horizon.

In this session, we will look at the history of declarative clients in Spring via Spring Cloud OpenFeign. We will also dive into upcoming options that are coming to Spring and the advantages that these new technologies bring to the developer experience.

Olga Maciaszek-Sharma

June 09, 2022
Tweet

More Decks by Olga Maciaszek-Sharma

Other Decks in Technology

Transcript

  1. About Olga Software Engineer in Spring Cloud team Spring Cloud

    LoadBalancer, Spring Cloud OpenFeign, Spring Cloud Netflix, Spring Cloud Contract, Spring Cloud Square, RSocket HTTP Bridge
  2. What if we could just create an annotated interface and

    have a library/ framework translate it into actual HTTP client requests?
  3. Feign Java to HTTP client binder • Core part of

    a former Spring Cloud Netflix module, passed over to the community • Supports various HTTP clients, including Apache HTTP, Apache HC5, Ok HTTP • Contracts - support for custom annotations and argument resolution • Support for a broad range of encoders/ decoders, including Jackson and GSON • Metrics, including Micrometer support
  4. Spring Cloud OpenFeign Spring MVC and Spring Cloud support for

    OpenFeign • Spring MVC annotations support • Auto-configurations for Feign-specific beans • Spring Cloud LoadBalancer support • Spring Cloud CircuitBreaker support • Tracing support
  5. Spring Cloud OpenFeign Demo Applications communicating over HTTP Customer Service

    SC OpenFeign Client SC LoadBalancer SC Sleuth Verification Service POST /verify Customer Verification Result Eureka Service Registry
  6. Spring Cloud OpenFeign - popularity Highly-readable interface clients with robust

    integrations • 797 GitHub stars • 8670549 Maven downloads in 2021 • Nearly flat learning curve for Spring MVC users
  7. Spring Cloud OpenFeign - issues • Issues with reusing client

    interfaces as controllers ◦ @RequestMapping at class level user issues (GH-547, GH-678) ◦ CVE-2021-22044 • Maintenance issues caused by dependence on third party upstream project • Lack of non-blocking support
  8. Spring Cloud Square Spring Boot and Spring Cloud support for

    Retrofit and OkHttp • WebClient support for Retrofit interface clients • Auto-configurations • Load-balancing • Tracing • Only Retrofit annotations • Incubator project
  9. Considerations More third-party integrations or an in-house solution? • HTTP/reactive,

    RSocket/RetroSocket - converging solutions • Opportunity to create a first-class solution in the Spring Framework ◦ No maintenance dependence on third party projects • Previous Spring Cloud support built around external projects ◦ Possibility of providing integration on top of the Spring Framework interface clients
  10. Why HTTP and RSocket now? Discussions with Spring Cloud around

    OpenFeign, Retrofit, and RSocket integrations
  11. Two goals Define a single request (no wildcards of any

    kind!) Avoid outright server-specific
  12. Resources • Demo code • Spring Cloud OpenFeign • Spring

    Framework documentation for HTTP interface client • Spring Cloud Square • RetroSocket