tutorial restful jax example java rest retrofit apache-httpclient-4.x jersey-client

restful - web service rest java eclipse



Cliente REST de Jersey con Apache HTTP Client 4.5 vs reacondicionamiento (2)

Estuve leyendo muchos artículos para encontrar el mejor Rest Client para la aplicación java, finalmente encontré que usar Jersey con Apache HTTP client 4.5 es genial, pero en muchos artículos descubrí que ahora Retrofit es el mejor (no mencioné Volley porque en En mi caso no necesito que la API admita el almacenamiento en caché.

Retrofit es mejor para una aplicación de cliente java. ¿O es simplemente mejor para Android? ¿Y por qué no encontré esta comparación antes ... no se pueden comparar?

¿Puedo hacer una comparación entre su rendimiento, la agrupación de conexiones, en qué capa funcionan, la compresión de las solicitudes y las respuestas, el tiempo de espera, la deserialización?

HTTP3 no es compatible con la agrupación de conexiones, ¿es por eso que la actualización se utiliza generalmente para Android? por lo tanto, no será práctico para una aplicación java normal donde causará una fuga en la conexión.

Mi objetivo es encontrar el mejor cliente de Rest API con un alto rendimiento y admitir un gran número de conexiones.

Gracias de antemano


Estás mezclando diferentes cosas juntas. Para aclarar las cosas por adelantado:

Retrofit es una biblioteca cliente para interactuar con las API REST. Como tal, ofrece el mismo nivel de abstracción que Jersey , RESTeasy o Spring''s RestTemplate . Todos ellos permiten interactuar con las API REST utilizando una API de tipo seguro sin tener que lidiar con aspectos de bajo nivel como la serialización, la creación de solicitudes y el manejo de respuestas.

Cada una de esas bibliotecas utiliza un cliente HTTP debajo para comunicarse con un servidor HTTP. Algunos ejemplos son el cliente HTTP Apache que mencionó, OkHttp o el envío HttpUrlConnection con el JDK.

Por lo general, puede mezclar y combinar las diferentes bibliotecas de clientes REST y los clientes HTTP, excepto Retrofit porque Retrofit tiene una gran dependencia de OkHttp desde la versión 2 (con Retrofit 1.x puede usar Apache HTTP Client, HttpUrlConnection o OkHttp).

De vuelta a la pregunta real: ¿Qué elegir cuándo?

Android : es fácil aquí porque JAX-RS , la API / tecnología detrás de Jersey y RESTeasy no es compatible con Android. Por lo tanto, Retrofit es más o menos su única opción, excepto quizás Volley, si no desea hablar HTTP directamente. Spring tampoco está disponible y Spring Android está abandonado .

JRE / JDK : Aquí tiene la opción completa de opciones.

  • La actualización podría ser agradable si desea una solución rápida y fácil para implementar una API de terceros para la que no haya SDK disponible o interfaces JAX-RS.
  • Spring''s RestTemplate es una buena opción si está usando Spring y no hay interfaces JAX-RS o no quiere comprar JAX-RS, es decir, también usarlo en el lado del servidor.
  • JAX-RS (Jersey, RESTeasy,…) es una buena opción si desea compartir las definiciones de la interfaz entre el cliente y los servidores o si de todos modos tiene todo en JavaEE.

Con respecto al rendimiento: los principales controladores aquí son el tiempo dedicado a realizar HTTP y la (des) serialización. Debido a que la (des) serialización es realizada por bibliotecas especializadas como Jackson o protobuf y todas usan la misma (o al menos podría hacerlas) no debería haber ninguna diferencia significativa.


Tomó un tiempo encontrarlo, sin embargo, he encontrado la biblioteca de clientes REST perfecta que hace que nuestro desarrollo sea declarativo y fácil. Podemos usar esto como el estándar al desarrollar nuevas implementaciones o API de REST.

Se llama Feign, desarrollado por el equipo de Netflix y hecho para trabajar con Spring Cloud Netflix. Más detalles here en el sitio del proyecto.

Algunas características incluyen: - Integración con Jackson, Gson y otros codificadores / decodificadores - Uso de OkHttp para la comunicación en red, una biblioteca HTTP probada - Enlace con SLF4J para funciones de registro - Implementación basada en interfaz, desarrollo mínimo. A continuación se muestra un ejemplo de cliente:

@FeignClient("stores") public interface StoreClient { @RequestMapping(method = RequestMethod.GET, value = "/stores") List<Store> getStores(); @RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json") Store update(@PathVariable("storeId") Long storeId, Store store); }

Y después de la respuesta de @aha como se cita a continuación:

JRE / JDK: Aquí tiene la opción completa de opciones.

La actualización podría ser agradable si desea una solución rápida y fácil para implementar una API de terceros para la que no haya SDK disponible o interfaces JAX-RS.

Spring''s RestTemplate es una buena opción si está usando Spring y no hay interfaces JAX-RS o no quiere comprar JAX-RS, es decir, también usarlo en el lado del servidor.

JAX-RS (Jersey, RESTeasy,…) es una buena opción si desea compartir las definiciones de la interfaz entre el cliente y los servidores o si de todos modos tiene todo en JavaEE.

Feign funciona como modernización y JAX-RS juntos: solución fácil y puede compartir definiciones de interfaz entre el cliente y los servidores y puede usar interfaces JAX-RS