当您使用REST使用POST创建新条目时,我看到一些API(例如Google's)指定您将XML作为请求的一部分发送,而其他API则指定您发送键/值对。是否有REST POST-s的标准或最佳实践?
答案 0 :(得分:4)
任何有效的表示格式都是可以的,并且规定您应该非常努力地使用标准格式,例如Atom存在的位置。
更新以下是来自Roy Fielding的relevant quote(HTTP标准的合着者,以及在他的博士论文中阐述REST的人)。如何设计Web服务中使用的表示非常重要:
REST API应该花费几乎所有 其定义的描述性努力 用于的媒体类型 代表资源[...]
请务必阅读后续问答A.
答案 1 :(得分:1)
这取决于REST服务实现者。
如果REST服务是现有html HTML表单的改编,则键值对通常更容易开始。
从JavaScript发布信息时,通常更容易使用JSON。
经常使用XML,因为人类很容易理解,并且每种语言/平台都有大量工具可以处理它。
答案 2 :(得分:1)
我建议使用最简单的东西,因为这就是REST的全部内容。下面的代码片段是我发布帖子的方式。我知道你并没有专门寻找代码,但下面的API(httpClient)效果很好。然后使用我们编码器一直使用的工具(request.getParameter()
)对其进行解码。我相信这是REST与SOAP的区别所在。不要让它变得困难!使用HTTP!
public void testHttpClient() {
PostMethod pMethod = null;
pMethod = new PostMethod("...url...");
NameValuePair[] data = {new NameValuePair("activeFlag", "yes"), new NameValuePair("custCode", "B010"), new NameValuePair("comments", "mark is cool")};
pMethod.setRequestBody(data);
this.makeCall(pMethod);
}
private String makeCall(HttpMethod method) {
String response = null;
HttpClient client = new HttpClient();
client.getParams().setAuthenticationPreemptive(true);
client.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(this.logon, this.pass));
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
method.getParams().setIntParameter(HttpMethodParams.SO_TIMEOUT, 5000);
try {
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
String aLine = null;
StringBuffer sb = new StringBuffer();
BufferedReader in = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));
while ((aLine = in.readLine()) != null) {
sb.append(aLine.trim());
System.out.println(aLine);
}
in.close();
response = sb.toString();
} catch (HttpException e) {
System.err.println("Fatal protocol violation: " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println("Fatal transport error: " + e.getMessage());
e.printStackTrace();
} finally {
method.releaseConnection();
}
return response;
}
答案 3 :(得分:-7)
SOAP是WebServices的标准(我认为你在Web服务和REST之间略有混淆)。
但这完全取决于实施者。