Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Industrialisation des contrats d'interface avec netflix feign

642 views

Published on

Industrialisation des contrats d'interface avec netflix feign (Java, Rest, JaxRs)

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Industrialisation des contrats d'interface avec netflix feign

  1. 1. Industrialisation des contrats d’interface Centraliser les contrats avec Netflix/Feign Quoi ? Netflix c’est fait pour se détendre devant une série non ? Par Idriss Neumann, le 09/05/2016
  2. 2. Sommaire ❖ Vous avez dit “centraliser” ? ➢ ➢ ❖ Utilisation de Feign ➢ ➢ ➢ ➢ ➢ ❖ Stratégie de migration des appels RestTemplate vers Feign ❖ Conclusion / Questions
  3. 3. Vous avez dit centraliser ? Analyse d’impact simplifiée ❖ ❖ ❖
  4. 4. Vous avez dit centraliser ? Simplification de la gestion des dépendances / micros-jars
  5. 5. Vous avez dit centraliser ? Simplification de la gestion des dépendances / micros-jars
  6. 6. Utilisation de Feign Pourquoi Feign ? ❖ ❖ ❖ ❖
  7. 7. Utilisation de Feign Créer un contrat d’interface // Version Jax-rs @Path(“/v1/users”) public interface UserService { @GET @Path(“/{id}”) User getById(@PathParam("id") String id); @POST @Path(“/”) User create(User user); @PUT @Path(“/{id}”) void update(@PathParam(“id”), User user); @DELETE @Path(“/{id}”) void delete(@PathParam(“id”)); } // Version Feign public interface UserService { @RequestLine(“GET /v1/users/{id}”) @Headers("accept: text/xml") User getById(@Param("id") String id); @RequestLine(“GET {href}”) @Headers("accept: text/xml") User getByHref(@Param("href") String href); @RequestLine(“GET /v1/users/?email={email}”) User getByEmail(@Param("email") String email); @RequestLine(“DELETE /v1/users/{id}”) @Headers("Authorization: Bearer {accessToken}") void delete(Param(“accessToken”) String accessToken); }
  8. 8. Utilisation de Feign Créer un client public class UserClient extends AbstractClient implements UserService { public UserClient(String url, RequestInterceptor interceptor) { super(url, interceptor); // Supposons que l’object mapper Jackson est héritée d’une abstract feignClient = Feign.builder() .client(buildHttpClient()) .requestInterceptor(interceptor) .encoder(new JacksonEncoder(OBJECT_MAPPER)) .decoder(new JacksonDecoder(OBJECT_MAPPER)) .target(UserService.class, url); // Pour du Jax-rs ajouter .contract(new JAXRSContract()) } // Implémenter les méthodes et déleguer }
  9. 9. Utilisation de Feign Instanciation d’un client dans Spring et utilisation // Instanciation @Bean(name = "userServiceClient") public UserService userService(@Value("${endpoint.url}") String endpoint) { return new UserClient(endpoint, (RequestInterceptor) requestTemplate -> { requestTemplate.header(“header_key”, “header_value”); }); } // Utilisation @Autowired private UserService userService; // ... userService.getById(id);
  10. 10. Stratégie de migration des appels RestTemplate vers Feign ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖
  11. 11. Questions

×