如何为 Java 创建 REST 客户端?[已关闭]
通过 JSR 311 及其实现,我们有了一个通过 REST 公开 Java 对象的强大标准。然而,在客户端,似乎缺少一些与Apache Axis for SOAP相当的东西 - 隐藏Web服务并将数据透明地封送回Java对象。
如何创建 Java RESTful 客户端?使用 HTTPConnection 和手动解析结果?还是泽西岛或Apache CXR等专业客户?
通过 JSR 311 及其实现,我们有了一个通过 REST 公开 Java 对象的强大标准。然而,在客户端,似乎缺少一些与Apache Axis for SOAP相当的东西 - 隐藏Web服务并将数据透明地封送回Java对象。
如何创建 Java RESTful 客户端?使用 HTTPConnection 和手动解析结果?还是泽西岛或Apache CXR等专业客户?
这是一个古老的问题(2008年),所以现在有更多的选择:
更新(2020年项目仍在进行):
关于选择 HTTP/REST 客户端的注意事项。确保检查您的框架堆栈用于HTTP客户端的内容,它如何进行线程处理,并且理想情况下,如果它提供一个客户端,则使用相同的客户端。也就是说,如果您使用Vert.x或Play之类的东西,您可能希望尝试使用其支持客户端来参与框架提供的任何总线或反应器循环...否则,请为可能有趣的线程问题做好准备。
正如我在这个线程中提到的,我倾向于使用Jage,它实现了JAX-RS并带有一个不错的REST客户端。好消息是,如果您使用 JAX-RS 实现 RESTful 资源,那么 Jersey 客户端可以重用实体提供程序,例如 JAXB/XML/JSON/Atom 等 - 因此您可以在服务器端重用与在客户端单元测试中使用的对象相同的对象。
例如,这里有一个来自Apache Camel项目的单元测试用例,它从RESTful资源(使用JAXB对象端点)中查找XML有效负载。resource(uri) 方法在此基类中定义,该基类仅使用 Jersey 客户端 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);
顺便说一句,我希望JAX-RS的未来版本添加一个不错的客户端API,就像泽西岛一样。