REST帖子格式

时间:2009-10-02 01:53:38

标签: rest http-post

当您使用REST使用POST创建新条目时,我看到一些API(例如Google's)指定您将XML作为请求的一部分发送,而其他API则指定您发送键/值对。是否有REST POST-s的标准或最佳实践?

4 个答案:

答案 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之间略有混淆)。

但这完全取决于实施者。