【问题标题】:API design - json_api best practice to return no dataAPI 设计 - json_api 不返回数据的最佳实践
【发布时间】:2016-06-01 02:07:06
【问题描述】:

我有一个也有 API 的 Rails 应用程序。我一直在尝试遵循http://jsonapi.org 的整体结构,但是在没有任何数据的情况下,我找不到任何指导方针。例如,我有一个看起来像这样的端点:

https://[root]/api/apps/34/localized_strings?from_date=1330776000

from_date 是一个 unix 时间戳,如果服务器有更新或更新的数据基于这个日期值我返回所有数据,如果没有更新我不想返回任何数据。我想知道这样做的最佳方法是什么。当前结果如下所示:

{
  "data": []
}

在没有更改或数据的情况下,在http://jsonapi.org 的基础上返回“状态”状态会更好或更传统吗:204

【问题讨论】:

    标签: ruby-on-rails json api-design json-api


    【解决方案1】:

    只要返回head :no_content,所以rails会返回204状态码,内容为空

    这里是销毁的例子

    def destroy
      # Destroy stuff
    
      # Return 204, no content
      head :no_content
    end
    

    【讨论】:

      【解决方案2】:

      According to the specification,表示空集合的响应是:

      HTTP/1.1 200 OK
      Content-Type: application/vnd.api+json
      
      {
        "links": {
          "self": "http://example.com/articles"
        },
        "data": []
      }
      

      服务器必须使用作为响应文档的主要数据提供的资源对象或 null 响应成功的请求以获取单个资源。

      HTTP/1.1 200 OK
      Content-Type: application/vnd.api+json
      
      {
        "links": {
          "self": "http://example.com/articles/1/author"
        },
        "data": null
      }
      

      【讨论】:

      • 这是不正确的。假设“无数据”OP 表示空正文,则stackoverflow.com/a/37521258/879854 是正确的:204 状态,无正文,无内容类型。如果 OP 意味着没有预期的主要资源,则可以省略数据元素。成功的文档必须包含数据、错误或元数据之一。因此,响应主体可能只是元或元,也可能是其他一些
      • 如果这是对资源的 GET,则 data: null 有意义:“获取具有资源对象的单个资源或 null 作为响应文档的主要数据提供”
      • 由于此请求可能被解释为条件获取,因此响应将为空正文和 304 httpstatuses.com/304
      • OP 不是在谈论一般的 JSON API 设计,我同意在其中返回 204 状态码。他正在谈论 JSONAPI 规范,这是一个在 JSON 中构建 API 的固执己见的规范。我只是引用了规范,因此我的回答是正确的。
      • 是的,这就是为什么我又评论了两次(我无法编辑)。你是对的,你的答案是有效的 JSON API。最后,我认为 OP 需要决定响应的含义。
      猜你喜欢
      • 1970-01-01
      • 2017-07-23
      • 2011-11-23
      • 2016-09-17
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多