Джерси REST клиент с Apache HTTP Client 4.5 vs retrofit

Я читал много статей, чтобы найти лучший клиент Rest для java-приложения, я нашел, наконец, использование Джерси с Apache HTTP client 4.5 отлично, но во многих статьях я обнаружил, что теперь Retrofit является лучшим (я не упоминал Volley, потому что в моем случае мне не нужно, чтобы API поддерживал кэширование.

делает Retrofit лучше для клиентского приложения java. или это просто лучше для Android? и почему я не нашел это сравнение .. их не может быть по сравнению?

могу ли я сравнить их производительность, пул соединений, на каком уровне они работают, сжатие запросов и ответов, тайм-аут, де-сериализацию?

HTTP3 не поддерживает пул соединений, поэтому retrofit обычно используется для android ?? поэтому это не будет практично для обычного приложения java, где это вызовет утечку соединения.

моя цель-найти лучший клиент REST API с высокой производительностью и поддержка большого количества соединений.

спасибо заранее

2 ответов


вы смешиваете разные вещи вместе. Чтобы прояснить ситуацию:

модернизация - это клиентская библиотека для взаимодействия с REST API. Таким образом, он предлагает тот же уровень абстракции, что и Джерси, RESTeasy или весны!--9-->RestTemplate. Все они позволяют взаимодействовать с REST API, используя типобезопасный API, без необходимости иметь дело с низкоуровневыми аспектами, такими как сериализация, построение запросов и ответ обращение.

каждая из этих библиотек использует HTTP-клиент внизу, чтобы фактически поговорить с HTTP-сервером. Примеры Apache HTTP client что вы упомянули, OkHttp или старая добрая HttpUrlConnection доставка с помощью JDK.

обычно вы можете смешивать и сопоставлять различные клиентские библиотеки REST и HTTP-клиенты, за исключением Retrofit потому что Retrofit имеет жесткую зависимость от OkHttp с версии 2 (С Дооснащение 1.x вы можете использовать Apache HTTP Client, HttpUrlConnection или OkHttp).

вернемся к актуальному вопросу: Что выбрать, когда.

Android: здесь легко, потому что JAX-RS, API / технология за Джерси и RESTeasy не поддерживается на Android. Следовательно, Retrofit-это более или менее ваш единственный вариант, кроме, возможно, Volley, если вы не хотите напрямую говорить о HTTP. Весна также недоступна и Весна Android является заброшенный.

JRE / JDK: вот у вас есть полный выбор вариантов.

  • Retrofit может быть хорошим, если вы хотите быстрое и простое решение для реализации стороннего API, для которого нет SDK или интерфейсов JAX-RS.
  • Spring RestTemplate-хороший выбор, если вы используете Spring и нет интерфейсов JAX-RS или вы не хотите покупать JAX-RS, т. е. также использовать его на стороне сервера.
  • JAX-RS (Джерси, RESTeasy,...)-хороший выбор, если вы хотите поделиться определениями интерфейса между клиентом и серверами или если вы все равно в JavaEE.

Что касается производительности: основными драйверами здесь является время, затрачиваемое на выполнение HTTP и (de)сериализации. Поскольку (de)сериализация выполняется специализированными библиотеками, такими как Jackson или protobuf, и все они используют одно и то же (или вы могли бы, по крайней мере, сделать их), не должно быть никакой существенной разницы.


потребовалось некоторое время, чтобы найти, однако я нашел идеальную клиентскую библиотеку REST, которая делает нашу разработку декларативной и простой. Мы можем использовать это как стандарт при разработке новых реализаций REST или API.

Он называется Feign, разработанный командой Netflix и сделанный для работы с Spring Cloud Netflix. Подробнее здесь на сайте проекта.

некоторые функции включают в себя: - Интеграция с Jackson, Gson и другими кодерами / декодерами - Использование OkHttp для сетевой связи, проверенной библиотеки HTTP - Связывание с SLF4J для регистрации функций - Реализация на основе интерфейса, минимальная разработка. Ниже приведен пример клиента:

@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);
}

и после ответа @aha, как указано ниже:

JRE / JDK: здесь у вас есть полный выбор опций.

Retrofit могло быть славно если вы хотите быстрое и легкое разрешение к реализовать сторонний API, для которого не доступен SDK или JAX-RS межфазные границы.

RestTemplate весны хороший выбор если вы используете Весна и нет интерфейсов JAX-RS, или вы не хотите покупать в JAX-RS, т. е. также используя его на стороне сервера.

JAX-RS (Джерси, RESTeasy, ...) - хороший выбор, если вы хотите поделиться интерфейса определения между клиентом и серверами или если вы все-в JavaEE в любом случае.

фальшивка работает как retrofit и JAX-RS совместно: легкое разрешение и может делить определения интерфейса между клиентом и серверами и могут использовать интерфейсы JAX-RS