Как создать REST-клиент для Java?

Благодаря JSR 311 и его реализациям у нас 9X_java есть мощный стандарт для предоставления 9X_oraclejdk объектов Java через REST. Однако на стороне 9X_rest-api клиента, похоже, не хватает чего-то, что 9X_javax можно сравнить с Apache Axis для SOAP - чего-то, что 9X_restful-architecture скрывает веб-службу и прозрачно маршалирует 9X_restful данные обратно в объекты Java.

Как вы создаете 9X_clients клиентов Java RESTful? Используете HTTPConnection 9X_jre и ручной парсинг результата? Или специализированные 9X_openjdk клиенты, например, Джерси или Apache CXR?

260
2

  • Вы можете сделать это очень просто с помощью resteasy (от Jboss). Я написал сообщение в блоге о [как разработать клиент Java REST] (http://guidogarcia.net/blo ...
16
Общее количество ответов: 16

Ответ #1

Ответ на вопрос: Как создать REST-клиент для Java?

Это старый вопрос (2008 г.), поэтому сейчас 9X_java есть намного больше вариантов, чем было 9X_clients тогда:

  • Apache CXF имеет три разных REST Client options
  • Jersey (упомянутый выше).
  • Spring RestTemplate заменен Spring WebClient
  • Commons HTTP Client создайте свой собственный для старых проектов Java.

ОБНОВЛЕНИЯ (проекты все еще активны в 2020 году):

  • Apache HTTP Components (4.2) Fluent adapter - базовая замена JDK, используемая несколькими другими кандидатами в этом списке. Лучше, чем старый HTTP-клиент Commons 3, и его проще использовать для создания собственного REST-клиента. Вам нужно будет использовать что-то вроде поддержки Jackson for JSON parsing, и вы можете использовать HTTP components URIBuilder to construct resource URIs, аналогичный клиенту Jersey / JAX-RS Rest. Компоненты HTTP также поддерживают NIO, но я сомневаюсь, что вы получите лучшую производительность, чем BIO, учитывая короткий характер запроса REST. Apache HttpComponents 5 поддерживает HTTP / 2.
  • OkHttp - базовая замена JDK, аналогичная компонентам http, используемая несколькими другими кандидатами в этом списке. Поддерживает новые протоколы HTTP (SPDY и HTTP2). Работает на Android. К сожалению, он не предлагает настоящего асинхронного режима на основе цикла реактора (см. Компоненты Ning и HTTP выше). Однако, если вы используете более новый протокол HTTP2, это не проблема (при условии, что количество подключений является проблемой).
  • Ning Async-http-client - обеспечивает поддержку NIO. Ранее известный как Async-http-client от Sonatype .
  • Feign оболочка для HTTP-клиентов нижнего уровня (okhttp, apache httpcomponents). Автоматически создает клиентов на основе заглушек интерфейса, аналогичных некоторым расширениям Jersey и CXF. Сильная весенняя интеграция.
  • Retrofit - оболочка для http-клиентов нижнего уровня (okhttp). Автоматически создает клиентов на основе заглушек интерфейса, аналогичных некоторым расширениям Jersey и CXF.
  • Volley оболочка для HTTP-клиента jdk, от Google
  • google-http оболочка для http-клиента jdk или httpcomponents apache от Google
  • Unirest оболочка для HTTP-клиента jdk, автор: kong
  • Resteasy Оболочка JakartaEE для HTTP-клиента jdk, от jboss, часть инфраструктуры jboss
  • jcabi-http оболочка для httpcomponents apache, часть коллекции jcabi
  • restlet оболочка для httpcomponents apache, часть структуры рестлета
  • rest-assured оболочка с утверждениями для удобного тестирования

Предупреждение о выборе клиентов HTTP 9X_j2se / REST. Обязательно проверьте, что ваш стек 9X_jdk фреймворка использует для HTTP-клиента, как 9X_clients он выполняет потоки, и в идеале используйте 9X_restful того же клиента, если он его предлагает. То 9X_.java есть, если вы используете что-то вроде Vert.x 9X_core-java или Play, вы можете попробовать использовать 9X_javax его поддерживающий клиент для участия в 9X_jdk любом цикле шины или реактора, который предоставляет 9X_java фреймворк ... в противном случае будьте 9X_java-se готовы к возможным интересным проблемам 9X_rest с потоками.

227
6

  • Что касается комментария ** unirest **, я хотел бы добавить, что в настоящее время (конец 2016 года) похоже, что этот проект больше не по ...

Ответ #2

Ответ на вопрос: Как создать REST-клиент для Java?

Как я уже упоминал в this thread, я обычно использую 9X_jre Jersey, который реализует JAX-RS и поставляется 9X_rest с хорошим клиентом REST. Приятно то, что 9X_jre если вы реализуете свои ресурсы RESTful 9X_.java с помощью JAX-RS, тогда клиент Джерси может 9X_restful повторно использовать поставщиков сущностей, таких 9X_jdk как JAXB / XML / JSON / Atom и т. Д., Поэтому 9X_client вы можете повторно использовать те же объекты 9X_jre на стороне сервера, что и вы. использовать 9X_.java в модульном тесте на стороне клиента.

Например, here is a unit test case из 9X_restful-web-services Apache Camel project, который ищет полезные данные XML из ресурса 9X_restful-web-services RESTful (с использованием конечных точек 9X_java объекта JAXB). Метод ресурса (uri) определен 9X_oraclejdk в this base class, который просто использует клиентский 9X_rest-api API Джерси.

например

 clientConfig = new DefaultClientConfig(); client = Client.create(clientConfig); resource = client.resource("http://localhost:8080"); // lets get the XML as a String String text = resource("foo").accept("application/xml").get(String.class); 

Кстати, я надеюсь, что 9X_rest будущая версия JAX-RS добавит приятный клиентский 9X_j2se API, аналогичный тому, что был в Джерси.

74
1

  • Просто обновление, но, чтобы ответить на комментари ...

Ответ #3

Ответ на вопрос: Как создать REST-клиент для Java?

Вы можете использовать стандартные API Java 9X_openjdk SE:

private void updateCustomer(Customer customer) { try { URL url = new URL("http://www.example.com/customers"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setInstanceFollowRedirects(false); connection.setRequestMethod("PUT"); connection.setRequestProperty("Content-Type", "application/xml"); OutputStream os = connection.getOutputStream(); jaxbContext.createMarshaller().marshal(customer, os); os.flush(); connection.getResponseCode(); connection.disconnect(); } catch(Exception e) { throw new RuntimeException(e); } } 

Или вы можете использовать клиентские 9X_openjdk API REST, предоставляемые реализациями JAX-RS, такими 9X_.java как Jersey. Эти API проще использовать, но 9X_jre они требуют дополнительных jar-файлов на 9X_jre пути к вашему классу.

WebResource resource = client.resource("http://www.example.com/customers"); ClientResponse response = resource.type("application/xml");).put(ClientResponse.class, "...

Для получения дополнительной 9X_core-java информации см .:

  • http://bdoughan.blogspot.com/2010/08/creating-restful-web-service-part-55.html

66
3

  • 13 строк для простого звонка для отдыха ** в 2018 году ** звучит слишком мно ...

Ответ #4

Ответ на вопрос: Как создать REST-клиент для Java?

Если вы хотите только вызвать службу REST 9X_restful и проанализировать ответ, вы можете попробовать 9X_jre Rest Assured

// Make a GET request to "/lotto" String json = get("/lotto").asString() // Parse the JSON response List winnderIds = with(json).get("lotto.winners.winnerId"); // Make a POST request to "/shopping" String xml = post("/shopping").andReturn().body().asString() // Parse the XML Node category = with(xml).get("shopping.category[0]"); 

16
0

Ответ #5

Ответ на вопрос: Как создать REST-клиент для Java?

Вы также можете проверить Restlet, который имеет 9X_restapi полные возможности на стороне клиента, более 9X_restapi ориентированный на REST, чем библиотеки 9X_core-java нижнего уровня, такие как HttpURLConnection 9X_restapi или Apache HTTP Client (которые мы можем 9X_restful-architecture использовать в качестве соединителей).

С 9X_core-java уважением, Жером Лувель

9
1

  • По состоянию на 24.10.2019 по ссылке было указано: «Ср ...

Ответ #6

Ответ на вопрос: Как создать REST-клиент для Java?

Вы можете попробовать Rapa. Сообщите нам свой 9X_rest-api отзыв о том же. И не стесняйтесь регистрировать 9X_oraclejdk проблемы или ожидаемые функции.

6
1

  • У Rapa действительно приятный интерфейс и несколько ...

Ответ #7

Ответ на вопрос: Как создать REST-клиент для Java?

Хочу выделить еще 2 варианта:

  • Restfulie, основанный на веб-платформе VRaptor, имеет реализации как на стороне сервера, так и на стороне клиента с очень хорошей поддержкой Hypermedia.
  • RESTEasy имеет реализацию JAX-RS proxy based client.

9X_java-se

6
1

  • Рестфули выглядит мертвым<p><span class ...

Ответ #8

Ответ на вопрос: Как создать REST-клиент для Java?

Попробуйте JdkRequest из jcabi-http (я разработчик). Вот как 9X_restful это работает:

String body = new JdkRequest("http://www.google.com") .header("User-Agent", "it's me") .fetch() .body() 

Дополнительную информацию можно 9X_openjdk найти в этом сообщении в блоге: http://www.yegor256.com/2014/04/11/jcabi-http-intro.html

6
0

Ответ #9

Ответ на вопрос: Как создать REST-клиент для Java?

Я недавно попробовал Retrofit Библиотеку из квадрата, она 9X_rest-api великолепна, и вы можете очень легко вызвать 9X_javax свой API отдыха. Конфигурация на основе 9X_j2se аннотаций позволяет нам избавиться от множества 9X_oraclejdk шаблонных кодов.

5
0

Ответ #10

Ответ на вопрос: Как создать REST-клиент для Java?

OkHttp легок и эффективен в сочетании с 9X_.java Retrofit. Это хорошо работает как для общего 9X_jdk использования Java, так и для Android.

OkHttp: http://square.github.io/okhttp/

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); OkHttpClient client = new OkHttpClient(); String post(String url, String json) throws IOException { RequestBody body = RequestBody.create(JSON, json); Request request = new Request.Builder() .url(url) .post(body) .build(); Response response = client.newCall(request).execute(); return response.body().string(); } 

Модернизация: http://square.github.io/retrofit/

public interface GitHubService { @GET("/users/{user}/repos") Call> listRepos(@Path("user") String user); } 

5
0

Ответ #11

Ответ на вопрос: Как создать REST-клиент для Java?

Я использую Apache HTTPClient для обработки 9X_rest-api всех аспектов HTTP.

Я пишу синтаксические 9X_jdk анализаторы XML SAX для содержимого XML, которые 9X_openjdk анализируют XML в вашу объектную модель. Я 9X_java считаю, что Axis2 также предоставляет методы 9X_restapi XML -> Model (Axis 1, что досадно, скрыла 9X_j2se эту часть). Генераторы XML тривиально просты.

Код 9X_restful не занимает много времени и, на мой взгляд, достаточно 9X_rest эффективен.

4
2

  • Я тоже согласен, и я написал оригинальный комментарий. Тогда у меня было желание контролировать десериализацию, но в настоящее время я бы использовал ...

Ответ #12

Ответ на вопрос: Как создать REST-клиент для Java?

Поскольку никто не упомянул, вот еще один: Feign, который 9X_restful используется Spring Cloud.

3
0

Ответ #13

Ответ на вопрос: Как создать REST-клиент для Java?

Хотя создать HTTP-клиент и выполнить повторный 9X_restful-architecture запрос несложно. Но если вы хотите использовать 9X_jdk некоторые автоматически сгенерированные 9X_.java клиенты, вы можете использовать WADL для 9X_java описания и генерации кода.

Вы можете использовать 9X_rest RestDescribe для генерации и компиляции WSDL, с его 9X_openjdk помощью вы можете создавать клиентов на 9X_openjdk php, ruby, python, java и C#. Он генерирует 9X_java чистый код, и есть хорошее изменение, которое 9X_core-java вам нужно немного подправить после генерации 9X_jdk кода, вы можете найти хорошую документацию 9X_javax и основные мысли, лежащие в основе инструмента 9X_oraclejdk here.

В Wintermute упоминается несколько интересных 9X_core-java и полезных WADL tools.

2
0

Ответ #14

Ответ на вопрос: Как создать REST-клиент для Java?

Я написал библиотеку, которая отображает 9X_.java интерфейс Java на удаленную службу JSON 9X_core-java REST:

https://github.com/ggeorgovassilis/spring-rest-invoker

public interface BookService { @RequestMapping("/volumes") QueryResult findBooksByTitle(@RequestParam("q") String q); @RequestMapping("/volumes/{id}") Item findBookById(@PathVariable("id") String id); } 

1
0

Ответ #15

Ответ на вопрос: Как создать REST-клиент для Java?

Примеры клиента jersey Rest:
Добавление 9X_restapi зависимости:

 com.sun.jersey jersey-json 1.8 com.sun.jersey jersey-server 1.8 com.sun.jersey jersey-client 1.8 org.json json 20090211 

ForGetMethod и передача двух 9X_rest-api параметров:

 Client client = Client.create(); WebResource webResource1 = client .resource("http://localhost:10102/NewsTickerServices/AddGroup/" + userN + "/" + groupName); ClientResponse response1 = webResource1.get(ClientResponse.class); System.out.println("responser is" + response1); 

GetMethod передает один параметр 9X_restful-architecture и получает ответ списка:

 Client client = Client.create(); WebResource webResource1 = client .resource("http://localhost:10102/NewsTickerServices/GetAssignedUser/"+grpName); //value changed String response1 = webResource1.type(MediaType.APPLICATION_JSON).get(String.class); List Assignedlist =new ArrayList(); JSONArray jsonArr2 =new JSONArray(response1); for (int i =0;i

Выше он возвращает 9X_j2se список, который мы принимаем как список, а 9X_java затем преобразуем его в массив Json, а затем 9X_restful в массив Json в список.

Если в почтовом запросе 9X_jre передается объект Json в качестве параметра:

 Client client = Client.create(); WebResource webResource = client .resource("http://localhost:10102/NewsTickerServices/CreateJUser"); // value added ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class,mapper.writeValueAsString(user)); if (response.getStatus() == 500) { context.addMessage(null, new FacesMessage("User already exist ")); } 

1
0

Ответ #16

Ответ на вопрос: Как создать REST-клиент для Java?

Я использовал RestAssured большую часть времени для 9X_restful-web-services анализа ответа службы отдыха и тестирования 9X_restful служб. Помимо Rest Assured, я также использовал 9X_java-se указанные ниже библиотеки для связи со службами 9X_java-se Resful.

а. Jersey Rest Client

б. Spring RestTemplate

в. Apache HTTP Client

1
0