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

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

Улучшена ли настройка для клиентского приложения java. или это просто лучше для Android? и почему я не нашел этого сравнения раньше... они не могут сравниться?

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

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

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

Заранее благодарю

Ответ 1

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

Retrofit - это клиентская библиотека для взаимодействия с API REST. Таким образом, он предлагает тот же уровень абстракции, что и Jersey, RESTeasy или Spring RestTemplate. Все они позволяют взаимодействовать с API-интерфейсами REST, используя API-интерфейс типа без необходимости иметь дело с такими низкими уровнями, как сериализация, обработка запросов и ответ.

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

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

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

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

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

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

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

Ответ 2

Понадобилось некоторое время, чтобы найти, однако я нашел идеальную клиентскую библиотеку 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: Здесь у вас есть полный выбор вариантов.

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

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

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

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