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

有帮助吗?

解决方案

这取决于REST业务实施者。

如果REST服务是现有的HTML HTML形式后的密钥值对通常更易于与开始。的适配

当从JavaScript发布信息通常是更容易使用JSON。

XML经常使用,因为它很容易让人们理解和有每种语言/平台的工具堆,可以对付它。

其他提示

任何有效的表示格式都可以,但前提是您应该非常努力地使用标准格式,例如 Atom(如果有)。

更新 这是一个 相关报价 来自 Roy Fielding(HTTP 标准的合著者,也是在他的博士论文中阐明 REST 的人)。如何设计 Web 服务中使用的表示形式至关重要:

REST API几乎应该花费所有描述性的努力来定义用于表示资源的媒体类型[...

请务必阅读后续的问答。

我建议使用的是最简单的,因为这是REST是怎么一回事。下面的代码片段是我做一个职位。我知道你是不是在找专门的代码,但下面的API(HttpClient的)的伟大工程。然后通过使用我们的编码器一直使用的工具(request.getParameter())解码。我相信这是从SOAP与众不同REST。不要让人很难!使用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;
}

SOAP 是用于Web服务标准(我觉得你bewteen Web服务略有困惑和REST)。

但它真的取决于实现者。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top