我的API应该在父对象中嵌套JSON数据吗?

我的API应该在父对象中嵌套JSON数据吗?,json,rest,api,swagger,openapi,Json,Rest,Api,Swagger,Openapi,我今天被称为“不专业”,因为我没有将JSON响应嵌套在父对象中 GET/users/{id}响应如下: { "username":"atr217", "age":35, ... } 他们期望: { "user":{ "username":"atr217", "age":35, ... } } 或者可能是这样: { "status":200, "message":"OK" "data

我今天被称为“不专业”,因为我没有将JSON响应嵌套在父对象中

GET/users/{id}
响应如下:

{
    "username":"atr217",
    "age":35,
    ...
}
他们期望:

{
    "user":{
        "username":"atr217",
        "age":35,
        ...
    }
}
或者可能是这样:

{
    "status":200,
    "message":"OK"
    "data":{
        "username":"atr217",
        "age":35,
        ...
    }
}
我已经看到了这两种方式。将数据包装到父级中是最佳做法吗?若然,原因为何?父母还有什么


我正在使用SwaggerHub和OpenAPI3,如果有必要的话。

我找到了正确的谷歌搜索词:“信封”

“我不喜欢封装数据。它只是引入了另一个键来导航潜在的密集数据树。元数据应该放在标题中。”

嵌套数据的一个参数是提供两个不同的根键,以指示响应的成功,即数据和错误。但是,在出现错误的情况下,我将此区别委托给HTTP状态代码

“最初,我的立场是不需要封装数据,HTTP本身提供了一个足够的“信封”来传递响应。但是……我现在建议封装。”

“HTTP是您的信封……话虽如此,在响应上添加描述性正文并没有什么错”

默认情况下不使用信封,但在需要时可以使用

“我们可以通过在默认情况下保持无信封状态并仅在例外情况下进行信封封装来证明API的未来。”

“有两种情况确实需要信封——如果API需要支持通过JSONP的跨域请求,或者如果客户端无法使用HTTP头。”


“喜欢信封的API通常在信封本身中包含分页数据。我不怪他们——直到最近,还没有更好的选择。现在包含分页详细信息的正确方法是使用RFC 5988引入的链接头。”

可能重复的
状态和
“消息”:“OK”/或者任何其他的
都是完全冗余的,因为我们可以从HTTP响应中得到它。一般来说,从HTTP响应中获得的所有信息在响应数据中都是冗余的,其余的都是遵循以下约定(团队、最佳实践的每个人同意使用的)等等,但在一天结束时可以争论。