通过 JSR 311 及其实现,我们拥有了通过 REST 公开 Java 对象的强大标准。然而,在客户端,似乎缺少一些与 Apache Axis for SOAP 类似的东西 - 隐藏 Web 服务并将数据透明地封送回 Java 对象的东西。
如何创建 Java RESTful 客户端?使用 HTTPConnection 并手动解析结果?或者专门的客户,例如Jersey 还是 Apache CXR?
这是一个老问题(2008),所以现在有比当时更多的选择:
-
阿帕奇CXF有三个不同的REST 客户端选项 http://cxf.apache.org/docs/jax-rs-client-api.html
-
Jersey https://jersey.java.net/(上文提到的)。
-
春季休息模板 http://blog.springsource.com/2009/03/27/rest-in-spring-3-resttemplate/被取代Spring Web客户端
-
公共 HTTP 客户端 http://hc.apache.org/httpclient-3.x/为较旧的 Java 项目构建您自己的项目。
更新(2020 年仍然活跃的项目):
-
Apache HTTP 组件 (4.2) Fluent 适配器 http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fluent.html- JDK 的基本替代品,被此列表中的其他几个候选者使用。比旧的 Commons HTTP Client 3 更好,并且更易于用于构建您自己的 REST 客户端。你必须使用类似的东西Jackson 用于 JSON 解析 http://jackson.codehaus.org/支持,你可以使用用于构造资源 URI 的 HTTP 组件 URIBuilder http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#d5e49类似于 Jersey/JAX-RS Rest 客户端。 HTTP 组件也支持 NIO,但考虑到 REST 的短请求特性,我怀疑您是否会获得比 BIO 更好的性能。Apache HttpComponents 5有 HTTP/2 支持。
-
OkHttp https://github.com/square/okhttp- JDK 的基本替代品,类似于 http 组件,被此列表中的其他几个候选者使用。支持较新的 HTTP 协议(SPDY 和 HTTP2)。适用于 Android。不幸的是,它没有提供真正的基于反应器循环的异步选项(请参阅上面的 Ning 和 HTTP 组件)。但是,如果您使用较新的 HTTP2 协议,这就不是什么问题了(假设连接计数有问题)。
-
Ning 异步-http-客户端 https://github.com/AsyncHttpClient/async-http-client- 提供 NIO 支持。以前称为异步 http 客户端 https://github.com/sonatype/async-http-client由 Sonatype 提供。
-
Feign https://github.com/OpenFeign/feign较低级别 http 客户端的包装器(okhttp、apache httpcomponents)。基于类似于某些 Jersey 和 CXF 扩展的接口存根自动创建客户端。强大的弹簧集成。
-
Retrofit http://square.github.io/retrofit/- 较低级别 http 客户端的包装器 (okhttp)。基于类似于某些 Jersey 和 CXF 扩展的接口存根自动创建客户端。
-
Volley https://github.com/google/volleyjdk http 客户端的包装器,由 google 提供
-
谷歌-http https://github.com/googleapis/google-http-java-clientjdk http 客户端或 apache httpcomponents 的包装器,由 google 提供
-
Unirest https://github.com/Kong/unirest-javajdk http 客户端的包装器,作者:kong
-
Resteasy https://github.com/resteasyjdk http 客户端的 JakartaEE 包装器,由 jboss 提供,是 jboss 框架的一部分
-
jcabi-http https://github.com/jcabi/jcabi-httpapache httpcomponents 的包装器,jcabi 集合的一部分
-
restlet https://github.com/restlet/restlet-framework-javaapache httpcomponents 的包装器,restlet 框架的一部分
-
放心 https://github.com/rest-assured/rest-assured带有断言的包装器,以便于测试
关于选择 HTTP/REST 客户端的警告。确保检查您的框架堆栈正在为 HTTP 客户端使用什么、它如何进行线程处理,并且最好使用相同的客户端(如果提供)。也就是说,如果您使用 Vert.x 或 Play 之类的东西,您可能想尝试使用其支持客户端来参与框架提供的任何总线或反应器循环......否则请为可能有趣的线程问题做好准备。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)