一尘不染

用于Java的REST客户端?

java

有了JSR 311及其实现,我们有了一个强大的标准,可以通过REST公开Java对象。但是,在客户端,似乎缺少与SOAP的Apache Axis类似的东西-隐藏了Web服务并将数据透明地封送回Java对象的东西。

您如何创建Java RESTful客户端?使用HTTPConnection和手动解析结果?还是专业客户(例如Jersey或Apache CXR)?


阅读 378

收藏
2020-03-04

共1个答案

一尘不染

这是一个古老的问题(2008年),所以现在有比以前更多的选择:

  • Apache CXF 具有三种不同的REST Client选项
  • Jersey (如上所述)。
  • Spring 也有自己的RestTemplate
  • Commons HTTP Client 为较旧的Java项目构建自己的。

Apache HTTP Components (4.2) Fluent adapter
可以提供NIO支持的新成员(尽管老实说,我认为这并不能像服务器一样真正提高客户端的性能)。

Apache HTTP Components (4.2) Fluent adapter-比旧的Commons HTTP Client 3更好,并且更易于用于构建自己的REST客户端。你必须使用类似于 Jackson的支持JSON解析,并且可以使用 HTTP组件URIBuilder来构造类似于Jersey / JAX-RS Rest客户端的资源URI。HTTP组件也支持NIO,但鉴于REST的短请求性质,我怀疑你会获得比BIO更好的性能。
更新2016:

OkHttp-支持更新的HTTP协议(SPDY和HTTP2)。适用于Android。不幸的是,它没有提供真正的基于反应器循环的异步选项(请参见上面的Ning和HTTP组件)。但是,如果你使用较新的HTTP2协议,则问题不大(假设连接数有问题)。
Retrofit-将根据类似于某些Jersey和CXF扩展名的接口存根自动创建客户端。使用OkHttp。
Apache HttpComponents 5应该具有HTTP2支持
关于选择HTTP / REST客户端的警告。确保检查你的框架堆栈用于HTTP客户端的方式,如何进行线程化,并且如果提供了该客户端,最好使用相同的客户端。那就是如果你使用Vert.x或Play之类的东西,你可能想尝试使用其支持客户端来参与框架提供的任何总线或反应堆循环…否则,为可能发生的有趣线程问题做好准备。

2020-03-04