使用Java的REST API
我有一个位于远程服务器上的管理Web应用程序。 这个应用程序是使用MEAN堆栈编写的,我有一个连接到Web应用程序所需的所有RESTful路由的列表。
我正在编写一个Java客户端应用程序,需要从此管理应用程序发送和接收数据。 如果我有服务器的IP地址和REST路由,如何将客户端连接到Web应用程序?
我想我需要提供一个到服务器和REST API文件的URL连接,然后调用像PUT
和GET
这样的路由函数。
现在有很多库用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));