Quel framework java pour les microservices

Voici une présentation de certains frameworks légérs Java qui facilitent le développement de microservices.

Le point commun entre tous [@TODO verifier ce point] est qu'ils sont tous basés sur Jersey d'apache et de l'implémentation des standards JAX-RS pour le rest.
Brefs, ils font tous du REST/JSON sur de l'http(s).

Plus lourd mais surement plus évolutif et mon préféré, Spring boot.
Avec l'initializer vous choississez les composants que vous souhaitez intégrer et il génère le pom (ou équivalent Gradle) et vous démarrer rapidement des webservices avec des outils de controles bien utiles, par exemple:

Et pour consommer le REST/JSON

il y a plusieurs possibilités:

  • Jackson une des plus connues librairie et ne se limite par au JSon. Un des reproches est sa taille qui peut etre problématique dans le cas de développement Android (limite @ 64k)

Exemple:

public void getBcoinPriceWithJackson() {
        Instant start = Instant.now();
        String serviceUrl = "https://blockchain.info/ticker";
        ObjectMapper mapper = new ObjectMapper();
        mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        try {
            MixinBcoinPrice bcoinPrices = mapper.readValue(new URL(serviceUrl), MixinBcoinPrice.class);
            System.out.println(bcoinPrices.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(Duration.between(start,Instant.now()));
    }
  • Moshi. Je le trouve assez complet et performant. Dans des tests sur un projet il était sensiblement plus performant que Jackson.

Exemple:

public void getBcoinPriceWithMoshi() {
        Instant start = Instant.now();
        HttpUrl.Builder urlBuilder = HttpUrl.parse("https://blockchain.info/ticker").newBuilder();
        String url = urlBuilder.build().toString();
        Request request = new Request.Builder()
                .url(url)
                .build();

        Response response = null;
        try {
            response = okHttpClient.newCall(request).execute();
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (response!=null && response.isSuccessful()) {
            try {
                System.out.println(response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println(Duration.between(start,Instant.now()));
    }
  • JAX-RS. Pourquoi utiliser une lib externe quand vous avez déjà ce qu'il faut dans JEE.

Exemple:

    public void getBcoinPriceWithJax() {
        Instant start = Instant.now();
        String serviceUrl = "https://api.coindesk.com/v1/bpi/currentprice.json";
        Client client = ClientBuilder.newClient();
        javax.ws.rs.core.Response response = client.target(serviceUrl)
                .request(MediaType.APPLICATION_JSON)
//                .header("Authorization", "Bearer eyJhbGciOiJIUzUxMiJ9")
                .get();
        System.out.println(response.toString());
        System.out.println(Duration.between(start,Instant.now()));
    }