Industrialisation des contrats d'interface avec netflix feign
-
Upload
idriss-neumann -
Category
Technology
-
view
396 -
download
0
Transcript of Industrialisation des contrats d'interface avec netflix feign
Industrialisation des contrats d’interfaceCentraliser 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
Sommaire❖ Vous avez dit “centraliser” ?
➢➢
❖ Utilisation de Feign➢➢➢➢➢
❖ Stratégie de migration des appels RestTemplate vers Feign
❖ Conclusion / Questions
Vous avez dit centraliser ?Analyse d’impact simplifiée
❖
❖
❖
Vous avez dit centraliser ?Simplification de la gestion des dépendances / micros-jars
Vous avez dit centraliser ?Simplification de la gestion des dépendances / micros-jars
Utilisation de FeignPourquoi Feign ?
❖❖❖❖
Utilisation de FeignCré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);
}
Utilisation de FeignCré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
}
Utilisation de FeignInstanciation 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);
Stratégie de migration des appels RestTemplate vers Feign
❖❖❖
❖❖
❖❖
❖❖
❖❖
Questions