你如何在休息服务中实现这一点?

时间:2011-06-27 16:04:01

标签: rest

我想创建一个确认先前请求的restful服务,并在一次调用中获取下一条消息。这节省了对服务器的不必要的调用。在一次休息呼叫中执行两次操作是否可以接受?如果是这样,你会使用什么静止动词,因为它似乎是get和put的组合?

请原谅我的无知,因为这对我来说是新的。

2 个答案:

答案 0 :(得分:1)

以下是将状态传输到服务器的一种方法,并在响应中确认收到内容,同时返回其他响应。协议中不存在任何通常执行此操作的机制,但您可以创建执行这些组合操作的资源。

GET /Step1
=>
200 OK
Content-Type: application/vnd.hal+xml
<resource rel="self" href="http://example.org/step1">
   <title>Hello User</title>
   <link rel="next" href="http://example.org/step2" />
<resource>


POST http://example.org/step2
<!-- Insert Content here -->
=>
200 OK
Content-Type: application/vnd.hal+xml
<resource rel="self" href="http://example.org/step2">
   <title>Thank you for your content</title>
   <response>This is your answer</response>
   <link rel="next" href="http://example.org/step3" />
<resource>

我正在使用hal作为媒体类型,因为它有一个明确定义的包含链接的方式。此外,我正在滥用标准的“下一个”链接关系,因为您通常使用下一个GET。你可能需要一个自定义的链接关系来真正做我的建议。

答案 1 :(得分:0)

这就是我一直在解决这个问题的方法。

REQUEST
PUT /resource # (or POST)
Accept: application/xml
Content-Type: application/xml

<Resource>
    <Blah/>
</Resource>

RESPONSE
HTTP 1.1 200 OK # (or 201 Created)
Content-Type: application/xml
Content-Location: /resource

<Resource>
    <Blah/>
</Resource>

我在响应中使用Content-Location可能是错误的(HTTP 1.1规范说PUT和POST未使用它),但这就是我一直在使用的。我很想知道别人是怎么做的。

一般情况下,我认为使用POST或PUT返回内容时不会出现问题。

约翰