Rest 没有';不要创建资源

Rest 没有';不要创建资源,rest,http,Rest,Http,假设系统管理用户。用户通过以下URL公开-/Users。特定用户通过以下URL公开-/users/{id}。用户通过以下URL公开报告-/Users/{id}/reports 一个操作包括生成报告。适当的HTTP请求是/users/{id}/reports上的POST。但是,在某些条件下,生成的报告将与上次生成的报告完全相同。因此,我认为在本例中返回最后生成的报告是一个好方法 我也知道,在这种情况下,不会创建任何资源 有没有正确的RESTful方法来处理这个案件?可能会返回一个特殊代码?如果报告

假设系统管理用户。用户通过以下URL公开-
/Users
。特定用户通过以下URL公开-
/users/{id}
。用户通过以下URL公开报告-
/Users/{id}/reports

一个操作包括生成报告。适当的HTTP请求是
/users/{id}/reports
上的
POST
。但是,在某些条件下,生成的报告将与上次生成的报告完全相同。因此,我认为在本例中返回最后生成的报告是一个好方法

我也知道,在这种情况下,不会创建任何资源


有没有正确的RESTful方法来处理这个案件?可能会返回一个特殊代码?

如果报告没有修改,我会使用304 Not Modified。这应该告诉大家,自上次导出以来,ressource没有更改,通常不会传输更多内容。如果缓存旧的结果,也可以将其用于引用旧的结果。通常304不用于post,但是使用post触发日志创建也可以被认为有点异国情调

如果客户端执行了条件GET请求,并且允许访问,但文档尚未修改,则服务器应使用此状态代码进行响应。304响应不能包含消息体,因此总是由头字段后的第一个空行终止


如果创建成功,我会发送一个201 created,并使用location头作为指向新文件的指针。

如果报告未修改,我会使用304 Not Modified。这应该告诉大家,自上次导出以来,ressource没有更改,通常不会传输更多内容。如果缓存旧的结果,也可以将其用于引用旧的结果。通常304不用于post,但是使用post触发日志创建也可以被认为有点异国情调

如果客户端执行了条件GET请求,并且允许访问,但文档尚未修改,则服务器应使用此状态代码进行响应。304响应不能包含消息体,因此总是由头字段后的第一个空行终止

如果创建成功,我会发送一个201 created,并使用location头作为指向新文件的指针

有没有正确的RESTful方法来处理这个案件?也许会返回一个特殊的代码

退一步:处理“创建”用例的一种非常直接的方法如下

  • 客户端向/users/1/reports发布请求
  • 源服务器创建一个新资源并计算此资源的新标识符(/users/1/reports/a)
  • 服务器返回一个响应,指示已创建新资源、该资源的位置及其当前表示形式
  • 已创建新资源的指示是状态代码:。 新创建的资源的位置由响应头描述。 内容的位置由响应头描述 当前表示是响应的最新形式(毫不奇怪)

    这种模式通常被称为

    有没有正确的RESTful方法来处理这个案件?也许会返回一个特殊的代码

    退一步:处理“创建”用例的一种非常直接的方法如下

  • 客户端向/users/1/reports发布请求
  • 源服务器创建一个新资源并计算此资源的新标识符(/users/1/reports/a)
  • 服务器返回一个响应,指示已创建新资源、该资源的位置及其当前表示形式
  • 已创建新资源的指示是状态代码:。 新创建的资源的位置由响应头描述。 内容的位置由响应头描述 当前表示是响应的最新形式(毫不奇怪)


    这种模式通常被称为

    304,但在这里并不合适。见:304在这里不合适。见:
    HTTP/1.1 201 Created
    Location: /users/1/reports/a
    Content-Location: /users/1/reports/a
    ...
    
    <representation of the report goes here>
    
    HTTP/1.1 200 OK
    Content-Location: /users/1/reports/a
    ...
    
    <representation of the report goes here>
    
    HTTP/1.1 303 See Other
    Location: /users/1/reports/a
    
    ...