目标
雅虎 HotJobs Resumé Search REST API的 Java 客户端。
背景
我习惯于为 SOAP API 编写 Web 服务客户端,其中wsimport会生成代理存根,而您正在运行。但这是一个 REST API,对我来说是新的。
细节
- REST API
- 没有WADL
- 没有正式的 XML 模式(XSD 或 DTD 文件)。有示例 XML 请求/响应对。
- 未提供示例代码
进步
我看了问题Rest clients for Java? ,但是那里的自动化解决方案假定您同时提供服务器和客户端,并在 POJO 上调用 JAXB 以生成模式和 REST API。
使用Jersey(一个JAX-RS实现),我已经能够发出手动 HTTP 请求:
import com.sun.jersey.api.client.*;
...
ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);
WebResource webResource = client.resource("https://hj.yahooapis.com/v1/HJAuthTokens");
webResource.accept("application/xml");
// body is a hard-coded string, with replacements for the variable bits
String response = webResource.post(String.class, body);
// parse response into a org.w3c.dom.Document
// interface with Document via XPATH, or write my own POJO mappings
响应可能如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Response>
<ResponseCode>0</ResponseCode>
<ResponseMessage>Login successful</ResponseMessage>
<Token>NTlEMTdFNjk3Qjg4NUJBNDA3MkJFOTI3NzJEMTdDNDU7bG9jYWxob3N0LmVnbGJwLmNvcnAueWFob28uY29tO0pVNWpzRGRhN3VhSS4yQVRqRi4wWE5jTWl0RHVVYzQyX3luYWd1TjIxaGx6U0lhTXN3LS07NjY2MzM1OzIzNDY3NTsxMjA5MDE2OTE5OzZCM1RBMVNudHdLbl9VdFFKMFEydWctLQ==</Token>
</Response>
或者,它可能看起来像:
<?xml version="1.0" encoding="utf-8"?>
<yahoo:error xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" xml:lang="en-US">
<yahoo:description>description</yahoo:description>
<yahoo:detail>
<ErrorCode>errorCode</ErrorCode>
</yahoo:detail>
</yahoo:error>