
JSON:API heeft veel concepten in de specificatie, die hier niet allemaal gedocumenteerd zijn. Gebruikers van de module hoeven echter niet alle concepten van de specificatie volledig te begrijpen om productief te kunnen werken met deze module.


集合(Collections) 是资源的列表。在解耦站点中,你会用它们在客户端创建诸如“新内容(New Content)”列表或“我的内容(My content)”版块之类的东西。
然而,当你对诸如 /jsonapi/node/article
这样的集合端点发起未加筛选的请求时,你只会得到你被允许查看的所有文章。
没有筛选器(filters),你就无法只获取你的文章,或只获取关于羊驼的文章。
本指南将教你如何像专业人士一样构建筛选器。
快速开始
最简单、最常见的筛选器是键值筛选(key-value filter):


简而言之:使用类似 ?include=field_comments.uid
的查询字符串,可以一次性包含 field_comments
引用的所有实体,以及这些实体上 uid
引用的所有实体!
JSON:API 通过允许你指定关系路径并将其包含在响应文档中,帮助你减少 HTTP 请求。如何实现呢?
获取单个资源
获取文章
假设你有一篇带有两条评论的文章,并且这两条评论的作者是同一个人。如果不使用 includes,要获取这些数据,你需要先请求 GET /jsonapi/node/article/some-random-uuid
:


分页可能是一个看似简单却复杂的话题。很容易陷入陷阱而没有遵循最佳实践。本页将帮助你“正确”地实现分页。换句话说,如果你阅读并理解本页的内容,我们认为你的客户端会更加健壮、具有前瞻性,并且让你未来的开发更轻松。
如果你只记住本指南中的一件事,那就是:不要自己构造分页 URL。
JSON:API 模块返回的每个分页响应中,已经包含了指向集合下一页的链接,你只需使用该链接即可。
在本文开头,我们将介绍 API 的一些重要特性,以及如何“正确”实现分页。在文末,你会找到一些常见问题与陷阱的解答。
如何实现?
JSON:API 模块返回的每个分页响应中都内置了分页链接。下面是一个小示例:


JSON:API 使得在单个请求中检索多个资源成为可能,这些路由称为“集合(collection)”路由。可以通过向基础资源路由发送 GET 请求来获取资源集合,例如 GET /jsonapi/node/article
,并且不包含 UUID。默认情况下,这将包含指定类型的所有资源。
过滤和排序在所有标准资源上默认可用。
请求头
以下请求头在所有 GET 请求中都是必须的,以确保 JSON:API 请求和响应的正确性。
-
Accept: application/vnd.api+json
-
Content-Type: application/vnd.api+json
以下请求头在示例中需要使用:


JSON:API 支持非常简单的多语言功能,但不支持高级用例。
它目前依赖于 Drupal 默认的语言协商机制,以协商实体的合适语言,并在翻译不可用时回退。长期来看,我们计划逐步摆脱该机制,同时保持向后兼容;我们希望添加符合 JSON:API 规范的正式翻译支持。
当前的语言协商机制:


本节包含每种请求类型的示例和信息:GET、POST、PATCH 和 DELETE
关于示例
所有示例都是可运行的示例,你可以在浏览器或 JSON 客户端(例如:Postman)中尝试。你需要一个标准的 Drupal 安装、一系列文章(Article 节点)以及启用 JSON:API 模块。
http://example.com/jsonapi/node/article/{{article_uuid}}
所有请求都使用 '/jsonapi' 路径前缀,这是 JSON:API 模块的默认值。在各种示例中,占位符使用双花括号语法表示,例如 {{...}}
。请将它们替换为你环境中适用的数据。
要允许 POST、PATCH 和 DELETE 操作,请访问
/admin/config/services/jsonapi
并勾选 “接受所有 JSON:API 创建、读取、更新和删除操作” 选项。
