使用Java的REST API

我有一个位于远程服务器上的管理Web应用程序。 这个应用程序是使用MEAN堆栈编写的,我有一个连接到Web应用程序所需的所有RESTful路由的列表。

我正在编写一个Java客户端应用程序,需要从此管理应用程序发送和接收数据。 如果我有服务器的IP地址和REST路由,如何将客户端连接到Web应用程序?

我想我需要提供一个到服务器和REST API文件的URL连接,然后调用像PUTGET这样的路由函数。

现在有很多库用Java来使用REST应用程序。

标准

JSR 339中定义的JAX-RS客户端API( javax.ws.rs.client包)是在Java中使用REST Web服务的标准方法。 除此之外,该规范由Jersey和RESTEasy实现 。

JAX-RS供应商特定的基于代理的客户端

Jersey和RESTEasy API都提供了代理框架。

基本思想是您可以将标准JAX-RS注释附加到接口 ,然后通过服务器端的资源类实现该接口,同时通过使用java.lang.reflect.Proxy动态生成该实现来重用客户端上的相同接口java.lang.reflect.Proxy调用正确的低级客户端API方法。

有关详细信息,请查看以下内容:

  • Jersey基于代理的客户端API
  • RESTEasy基于代理的客户端API

其他资源

您可以考虑使用其他一些好的选项来替代JAX-RS客户端API:

  • Spring RestTemplate
  • OkHttp
  • 改造
  • Netflix Feign

我首先阅读泽西岛的文档,特别是客户端部分。 您将需要熟悉WebTarget类并调用它(示例来自文档):

 ClientConfig clientConfig = new ClientConfig(); clientConfig.register(MyClientResponseFilter.class); clientConfig.register(new AnotherClientFilter()); Client client = ClientBuilder.newClient(clientConfig); client.register(ThirdClientFilter.class); WebTarget webTarget = client.target("http://example.com/rest"); webTarget.register(FilterForExampleCom.class); WebTarget resourceWebTarget = webTarget.path("resource"); WebTarget helloworldWebTarget = resourceWebTarget.path("helloworld"); WebTarget helloworldWebTargetWithQueryParam = helloworldWebTarget.queryParam("greeting", "Hi World!"); Invocation.Builder invocationBuilder = helloworldWebTargetWithQueryParam.request(MediaType.TEXT_PLAIN_TYPE); invocationBuilder.header("some-header", "true"); Response response = invocationBuilder.get(); System.out.println(response.getStatus()); System.out.println(response.readEntity(String.class));