JSON:API
使用 JSON 构建 API 的规范
JSON:API v1.1 于 2022 年 9 月 30 日正式发布!🎉
如果您曾经与团队就 JSON 响应的格式问题争论不休,那么 JSON:API 可以帮助您停止无谓的争论,专注于真正重要的内容:您的应用程序。
通过遵循共享约定,您可以提高生产力,利用通用工具和最佳实践。围绕 JSON:API 构建的客户端能够利用其功能,高效地缓存响应,有时甚至完全消除网络请求。
以下是一个实现 JSON:API 的博客的响应示例
{
"links": {
"self": "http://example.com/articles",
"next": "http://example.com/articles?page[offset]=2",
"last": "http://example.com/articles?page[offset]=10"
},
"data": [{
"type": "articles",
"id": "1",
"attributes": {
"title": "JSON:API paints my bikeshed!"
},
"relationships": {
"author": {
"links": {
"self": "http://example.com/articles/1/relationships/author",
"related": "http://example.com/articles/1/author"
},
"data": { "type": "people", "id": "9" }
},
"comments": {
"links": {
"self": "http://example.com/articles/1/relationships/comments",
"related": "http://example.com/articles/1/comments"
},
"data": [
{ "type": "comments", "id": "5" },
{ "type": "comments", "id": "12" }
]
}
},
"links": {
"self": "http://example.com/articles/1"
}
}],
"included": [{
"type": "people",
"id": "9",
"attributes": {
"firstName": "Dan",
"lastName": "Gebhardt",
"twitter": "dgeb"
},
"links": {
"self": "http://example.com/people/9"
}
}, {
"type": "comments",
"id": "5",
"attributes": {
"body": "First!"
},
"relationships": {
"author": {
"data": { "type": "people", "id": "2" }
}
},
"links": {
"self": "http://example.com/comments/5"
}
}, {
"type": "comments",
"id": "12",
"attributes": {
"body": "I like XML better"
},
"relationships": {
"author": {
"data": { "type": "people", "id": "9" }
}
},
"links": {
"self": "http://example.com/comments/12"
}
}]
}
上面的响应包含了一个“文章”集合中的第一个元素,以及指向该集合中后续成员的链接。它还包含与文章链接的资源,包括其作者和评论。最后,还提供了用于获取或更新这些资源的链接。
JSON:API 不仅涵盖响应,还涵盖创建和更新资源。
JSON:API 已在 IANA 正式注册。其媒体类型标识符是 application/vnd.api+json
.
要开始使用 JSON:API,请查看基本规范的文档。
JSON:API 社区创建了一系列扩展,API 可以使用这些扩展为客户端提供超出基本 JSON:API 规范中描述的信息或功能。这些扩展被称为配置文件。
您可以浏览现有的配置文件,或者创建一个新的配置文件。
该规范的主要里程碑包括
更详细的历史记录可在此处获得此处。
您可以订阅单个更改的 RSS 订阅源此处。