Spring Интеграция или HTTP-клиент Apache

У меня есть приложение spring, которое требует вызова внешних API API REST для некоторых данных.

Формат данных из API - это JSON.

Мой вопрос в том, какой из следующих вариантов лучше и легкий вес для внешних вызовов api

  • Spring интеграция (используя ws: исходящий-шлюз)

  • Apache Commons HttpClient

Поделитесь своими мыслями...

Ответ 1

Как уже упоминалось, обе работы выполняются как Spring RestTemplate, так и Джерси-клиент для отдыха. Я использовал оба. Оба они отлично работают с Jackson и IIRC, они автоматически будут использовать его, если нашли (spring наверняка).

Есть одно преимущество, которое мне нравится в Spring RestTemplate - это то, что вы можете подключить Commons HTTP к транспорту. Поэтому, если у вас были некоторые странные заголовки, файлы cookie, тайм-аут, потоки, вы можете настроить Commons HTTP и затем поместить его в RestTemplate.

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
CommonsClientHttpRequestFactory f = new CommonsClientHttpRequestFactory();
f.setReadTimeout(120 * 1000);

Дело в том, что если вы думаете об использовании Commons HTTP Client, то, как @Skaffman говорит, что RestTemplate не имеет ничего общего с чем-то более сложным!

Ответ 2

Spring поставляется с классом RestTemplate (javadoc), который должен сделать это проще. Он скрывает обработку HTTP и предоставляет интерфейс операций типа REST. Он включает поддержку конвертеров сообщений для преобразования в JSON и из него (в этом случае Spring имеет поддержку библиотеки Jackson).

Spring Интеграция огромна для этого - REST по своей сути прост. Commons HttpClient будет работать, но у вас будет дополнительная работа над этим.

Смотрите раздел Spring docs о том, как использовать RestTemplate, и преобразование сообщения JSON.

Ответ 3

Я использовал Spring и Jersey. Джерси упрощает создание веб-служб RESTful с помощью Spring с помощью аннотаций типа @GET & @POST и @PUT @DELETE с библиотекой JAX-RS.