【问题标题】:RESTful POST ResponseRESTful POST 响应
【发布时间】:2018-03-01 16:31:27
【问题描述】:

我有一个非常简单的 RESTful 服务,它通过 POST 接收一些表单数据,其目的是在云存储(Amazon S3、Azure Blob 存储等)中简单地保留文本主体(具有唯一 ID)作为一个文件...

所以,问题是.. 如果一切都很好,并且我向调用者返回 200 响应,那么我应该向调用者返回什么内容?

什么? 什么都没有?

如果这是创建一个数据库记录..也许该新记录的 id 可能有用..但在这种情况下,我认为只是 HttpRepsone 代码就足够了吗?

有人同意、不同意或有讨论的支持链接吗?

我应该补充一点,对这个服务的请求几乎是......交出,然后去......他们实际上并不需要我提议发回的唯一ID......这个更多的是为了“完整性”。

【问题讨论】:

    标签: rest httprequest httpresponse


    【解决方案1】:

    简答

    一旦您在服务器上创建资源,您应该返回201 状态代码以及Location 标头,以便客户端定位新创建的资源。

    响应负载是可选的,它通常描述和链接到创建的资源。

    稍长一点的回答

    请参阅RFC 7231 中的以下引用:

    4.3.3. POST

    [...] 如果由于成功处理 POST 请求而在源服务器上创建了一个或多个资源,则源服务器应该发送包含 Location201(已创建)响应标头字段为创建的主要资源提供标识符,以及在引用新资源时描述请求状态的表示。 [...]

    同样来自RFC 7231

    6.3.2. 201 Created

    201(已创建)状态代码表示请求已完成,并导致创建了一个或多个新资源。请求创建的主要资源由响应中的 Location 标头字段标识,如果未收到 Location 字段,则由有效请求 URI 标识。

    201 响应负载通常描述并链接到创建的资源。 [...]

    7.1.2. Location

    Location 标头字段在某些响应中用于引用与响应相关的特定资源。关系类型由请求方法和状态码语义组合定义。

    Location = URI-reference
    

    字段值由单个 URI 引用组成。 [...] 对于201(已创建)响应,Location 值是指请求创建的主要资源。 [...]

    【讨论】:

    • v.内容丰富的答案。我将返回 201,但创建的资源的位置有点多余,因为服务发布者永远无权访问该数据。如果返回位置是一种好习惯,我至少会返回唯一 ID,是吗仍然在位置标题中有意义吗?
    • @m1nkeh RCF 7231 表示 Location 值由单个 URI 组成。但是为什么客户端能够在服务器上创建资源,而以后无法检索此类资源的表示形式呢?
    • 哦,这是网站上的表单提交..提交的数据只对其他系统感兴趣..网站只关心资产的提交和创建是否成功..永远不需要拿回来。
    【解决方案2】:

    我应该补充一点,对这个服务的请求非常多......交出,然后去......他们实际上并不需要唯一的 id

    在响应发布请求时不返回任何内容绝对没问题。你是说调用者甚至不需要它。但是状态码 201 会更有意义。

    【讨论】:

    • cool.. 在这种情况下,我会将我的回复从 200 切换到 201 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    相关资源
    最近更新 更多