servicio restclient example ejemplo consumir java apache-httpclient-4.x apache-commons-httpclient jersey-client

restclient - post rest java



¿Cómo se comparan Jersey-client y Apache HTTP Client? (1)

Estas dos cosas probablemente no deberían ser comparadas directamente. Jersey es un cliente REST, que ofrece una implementación JAX-RS completa, una API fluida y una potente pila de filtros. Apache Http Client es un cliente HTTP, perfecto para administrar detalles de bajo nivel como tiempos de espera, rutas de proxy complejas y sondeo de conexión. Actúan en diferentes niveles de tu pila de protocolos. Cuando utilizas Jersey, siempre hay algún tipo de backend de cliente HTTP involucrado. Dado que no hay back-end explícitamente, Jersey usará HttpUrlConnection como un back-end predeterminado.

Jersey con HttpUrlConnection backend ejemplo:

Client client = Client.create(); WebResource webResource = client.resource("http://localhost:8080/path"); ClientResponse response = webResource.accept("application/json") .get(ClientResponse.class);

Jersey con Apache Http Client backend ejemplo:

HttpClient apacheClient = HttpClientBuilder.create().build(); Client client = new Client(new ApacheHttpClient4Handler(apacheClient, new BasicCookieStore(), true)); WebResource webResource = client.resource("http://localhost:8080/path"); ClientResponse response = webResource.accept("application/json") .get(ClientResponse.class);

Tenga en cuenta el uso de Handler en el último ejemplo. Esta es una abstracción de integración clave para Jersey para incorporar y utilizar varios backends. El primer ejemplo usa URLConnectionClientHandler fondo del capó.

Hablando de rendimiento y características, tiene poco sentido comparar Apache Http Client con Jersey. Es posible que desee comparar los diferentes backends de Jersey aquí, ya que Jersey en sí no es más que una API de ajuste. Me gustaría destacar algunas diferencias clave entre HttpUrlConnection y Apache Http Client en base a mi propia experiencia:

HttpUrlConnection

  • No se necesitan dependencias externas. Esto puede ser bastante valioso en plataformas integradas o móviles.
  • Extremadamente bien documentado en todos lados
  • Tiene una API mal diseñada. HttpUrlConnection implementación basada en HttpUrlConnection es difícil de mantener y extender.
  • Muchas funciones se configuran a través de las propiedades de JVM, algunas de las cuales pueden no ser reconfigurables durante el tiempo de ejecución.
  • En algunos casos, sin esperanza en el manejo de tiempos de espera. Puede terminar configurando 10 propiedades de JVM diferentes para tiempos de espera diferentes y aún obtener sus conexiones colgando para siempre en algunas circunstancias.
  • Dado que Gingerbread es una API de cliente http recommended para Android.

Apache Http Client

  • Para las versiones 3.X, su rendimiento fue algo similar a HttpUrlConnection . La versión 4.1 contiene muchas mejoras de rendimiento y funciona mucho mejor que su contraparte
  • Muy bueno para gestionar la conexión y los tiempos de espera de lectura de datos
  • Su diseño sigue el Principio Abierto / Cerrado , por lo que puede personalizar casi cualquier parte del procesamiento HTTP con su propia implementación. Ejemplos: estrategias de redireccionamiento, estrategias de reintento, almacenamientos personalizados de cookies, interceptores de solicitudes / respuestas, etc.
  • Ofrece una amplia compatibilidad con proxy con constructores de rutas personalizables para rutas de múltiples proxy complejos
  • Tiene un grupo de conexiones por ruta fuera de la caja. Esto puede proporcionar un buen beneficio de rendimiento si se usa SSL / TLS, especialmente con el hardware PKCS # 11 tokens involucrados. HttpUrlConnection también tiene una agrupación interna, pero no tiene herramientas para personalizar qué o cuándo agrupar, no hay instalaciones de supervisión para verificar el estado del grupo.
  • Cuenta con registro detallado

Tenga en cuenta que también es posible usar otros backends (por ejemplo, para clientes no bloqueantes) con Jersey si tiene una implementación com.sun.jersey.api.client.ClientHandler apropiada.

Primero que nada, no estoy tratando de comenzar una guerra de llama aquí. Conozco a Jersey lo suficientemente bien, pero apenas he usado httpclient.

¿Cuáles son las diferencias clave entre jersey-client y httpclient de Apache? ¿En qué áreas es uno mejor que el otro? ¿Hay una buena tabla de comparación en alguna parte? ¿Cuál funciona mejor con archivos más grandes (digamos 2048 MB)?

¡Muchas gracias por sus comentarios!