【问题标题】:REST endpoint returning multiple JSON types返回多种 JSON 类型的 REST 端点
【发布时间】:2014-09-23 07:33:27
【问题描述】:

我们正在讨论 REST 基础架构,因为其中一个端点目前可以返回两种不同类型的数据:

如果找不到任何对象,它会返回如下内容:

{
   "key1": "value1",
   "key2": "value2"
}

如果它可以找到任何数据,它会返回如下内容:

{
   "key3": "value3",
   "key4": [   {
      "key5": "value5",
      "output":       [
                  {
            "name": "value6",
            "value": "value7"
         },
                  {
            "name": "value8",
            "value": 0
         }
      ]
   }]
}

我认为这不是非常完整的 REST,但我对 REST 设计相对较新。

有哪些好的地方可以指导如何设计此类响应?

【问题讨论】:

  • 我认为this 会帮助你。

标签: rest


【解决方案1】:

对此有很多意见。我的观点是,如果找不到任何对象,则返回 404。如果您找到一个或多个对象,您将返回一个 200 以及包含这些对象的正文。

如何在200 正文响应中构造这些对象取决于您。我的偏好一直是单个项目的直接 JSON 对象,或多个数组。

这里有一些例子:

GET /api/users/20000000 返回404

GET /api/users/1 返回 200,正文为 {"name":"John Smith","id":"1","email":"john@smith.net"}

GET /api/users 返回 200 的主体为 [{"name":"John Smith","id":"1","email":"john@smith.net"},{"name":"Jill Smith","id":"2","email":"jill@smith.net"},{"name":"Someone Else","id":"3","email":"someone@else.com"}]注意数组格式)

GET /api/users/1,2 返回 200 的主体为 [{"name":"John Smith","id":"1","email":"john@smith.net"},{"name":"Jill Smith","id":"2","email":"jill@smith.net"}]注意数组格式)

仅供参考,我必须为一个快递项目实现类似的东西,所以我用 booster http://github.com/deitch/booster 标准化了它

【讨论】:

  • 我不在 JavaScript 领域,所以我不能使用 booster。您的回答确实帮助我在这里就如何组织事物进行了内部讨论。非常感激。还有一件事:见下一条评论。
  • 如果用户没有任何属性,你会怎么做(是的:我们API中返回的对象可以是空的):只为他们返回[{}]?以及为什么{...}[{...},{...}] 之间的区别。为什么不总是返回像[{...}] 这样的数组?
  • 嗯,那么,我很高兴它有帮助(如果以意想不到的方式)。 :-)
  • 是的,如果有实际资源,但它没有属性,我会根据情况返回{}[{}]。至于为什么不总是数组?因为我想保持一致。 GET /api/users 是一个查询,所以它返回一个数组; GET /api/users/1 是单个项目的 GET; GET /api/users/1,2 是多个项目的 GET,因此它返回一个数组。
  • 我想只要你觉得你会总是返回一个单一的资源,只是它可能有多个键/值对,你对数组是安全的.但是,如果您必须在一次调用中返回多个资源,您将无法使用数组。返回嵌入数组的对象可能更安全:{props:[{key1:value1},{key2:value2}]} 等,因此将来您可以拥有一个对象数组
猜你喜欢
  • 2015-09-23
  • 2016-09-09
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多