json - 我的 API 是否应该将 JSON 数据嵌套在父对象中?

标签 json rest api swagger openapi

我今天被称为“不专业”,因为我没有将我的 JSON 响应嵌套在父对象中。
GET /users/{id}回应:

{
    "username":"atr217",
    "age":35,
    ...
}

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

或者也许是这样:
{
    "status":200,
    "message":"OK"
    "data":{
        "username":"atr217",
        "age":35,
        ...
    }
}

我已经看到它是双向的。将数据包装在父级中的最佳做法是什么?如果是这样,为什么? parent 还有什么?

如果这很重要,我正在使用 SwaggerHub 和 OpenAPI 3。

最佳答案

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

RESTful API Design Tips from Experience

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

“嵌套数据的一个论点是提供两个不同的根键来指示响应、数据和错误的成功。但是,我将这种区别委托(delegate)给 HTTP 状态代码,以防出现错误。”

“最初,我认为封装数据不是必需的,HTTP 本身提供了足够的“信封”来传递响应。不过……我现在建议包住。”

When in my REST API should I use an envelope? If I use it in one place, should I always use it?

“HTTP 是你的信封……话虽如此,在响应中包含描述性正文并没有错”

Best Practices for Designing a Pragmatic RESTful API

“默认情况下不要使用信封,但在需要时使其成为可能”

“我们可以通过在默认情况下保持无信封并仅在特殊情况下进行信封来验证 API。”

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

“喜欢信封的 API 通常在信封本身中包含分页数据。我不怪他们——直到最近,没有多少更好的选择。今天包含分页细节的正确方法是使用 RFC 5988 引入的 Link header 。”

关于json - 我的 API 是否应该将 JSON 数据嵌套在父对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52958714/

相关文章:

javascript - 在Javascript中更新JSON数据的引用问题

rest - 如何在同一端口上启用带TLS的gRPC和REST服务

java - REST:客户端可以通过 POST 传递包装对象吗?

python - "requests.exceptions.ConnectionError: (' 连接中止。 ', RemoteDisconnected(' 远端关闭连接无响应 ',))"

由 c++ Mysql C API mysql_real_escape_string

javascript - 未捕获的语法错误 : Unexpected token - Cloud Code Parse save function

java - 将 JSON 字符串解析为 List<Data Entry> 的文本文件

api - 基于 XML API 调用创建 Guzzle 服务定义

javascript - 计算 json 数据以在 highchart 折线图中创建动态系列

rest - Golang fasthttp 请求很慢