7

理想情况下,我正在寻找类似 JAX-RS 的东西(使用注释来描述我想要调用的服务),但允许调用使用其他技术(不是 JAX-RS)实现的 REST 服务。有什么建议吗?

4

5 回答 5

9

JAX-RS (JSR311) 没有定义客户端 API,但大多数 JAX-RS 实现都有一个,例如JerseyRESTeasyApache CXF。Restlet 框架还具有客户端支持以及单独的HTTP 客户端扩展

由于这些是 REST 的专用库/框架,我建议您查看这些。

于 2009-05-31T10:44:01.647 回答
7

您在评论中写道,您“希望获得比 HttpClient 更高级别的东西”。听起来Restlet会很完美。它为实现和使用RESTful Web 应用程序提供了一个高级 API,并为低级实现提供了即插即用适配器。

例如,要使用 Restlet 1.1 将 webform 发布到资源:

Client client = new Client(Protocol.HTTP);

Form form = new Form();
form.add("foo", "bar");
form.add("abc", "123");

Response response = client.post("http://host/path/to/resource", form.getWebRepresentation())

if (response.getStatus().isError()) {
    // deal with the error
    return;
}

if (response.isEntityAvailable()) {
    System.out.println(response.getEntity().getText());
}

如果您需要在请求上设置更多选项,可以使用 Request 对象:

Form form = new Form();
form.add("foo", "bar");
form.add("abc", "123");

Request request = new Request(Method.POST, "http://host/path/to/resource");

request.setEntity(form.getWebRepresentation());

request.setReferrerRef("http://host/path/to/referrer");

Response response = client.handle(request);

于 2009-06-02T01:39:56.167 回答
2

我建议你看看WADL 项目。WADL 之于 REST 就像WSDL之于 SOAP。

您首先需要使用 WADL 定义 REST 接口。然后,您可以在其上运行 wadl2java 工具来为 REST 调用生成客户端存根。

一旦你有了 Web 服务的 WADL,你就可以实现一些工具来做其他事情,例如生成服务器端存根、生成文档等。

于 2009-05-28T22:57:28.637 回答
1

大部分来自 apache 的HttpClient (参见http://hc.apache.org/httpcomponents-client-ga/)。

于 2009-05-28T22:45:09.690 回答
0

正如 Gandalf 和 Darrel Miller 所说,HttpClient。

您不需要从 HTTP 参数构造 XML。XML 应该只是两个独立系统之间的接口。使用 HttpClient 可以让您使用 Java 中的 String 值,无需再从那里返回 XML。

如果此时您要返回 XML 以发送到另一个系统,您应该考虑在与另一个系统通信之前将值从 HTTP 参数移回您的域/应用程序逻辑。这对于保持应用程序逻辑与系统间通信的适当分离是必要的。

于 2009-06-24T13:43:41.667 回答