
简而言之:使用类似 ?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 创建、读取、更新和删除操作” 选项。


此页面展示了 JSON:API 模块 的各种 GET 请求示例。
在以下所有示例中,请求头不是必须的。如果匿名用户可以访问内容实体,则不需要认证。对于菜单等配置实体,请参考最后部分。
请注意,在所有情况下,当需要 id 时,它始终是实体的 uuid,而不是实体 id。
Accept 请求头
请确保始终发送以下请求头:Accept: application/vnd.api+json。
curl \
--header 'Accept: application/vnd.api+json' \
....
基本 GET 示例
URL: http://example.com/jsonapi/node/article/{{article_uuid}}


此页面展示了 JSON:API 模块 的各种 POST 请求示例。
POST 请求用于创建新资源。如果需要修改资源,请使用 PATCH。
JSON:API 规范(因此 JSON:API 模块)仅支持每个 POST 请求创建一个资源。对于 Drupal,这意味着无法(仅使用该模块)在一个请求中创建多个实体。如果你想在创建父实体的同时创建被引用的实体,就需要这种功能。虽然 JSON:API 不支持此行为,但像 Subrequests 这样的模块可以帮助实现。
启用创建操作
访问 /admin/config/services/jsonapi
并勾选 “接受所有 JSON:API 创建、读取、更新和删除操作” 选项。


此页面展示了 JSON:API 模块 的 PATCH 请求示例。
启用更新操作
访问 /admin/config/services/jsonapi
并勾选 “接受所有 JSON:API 创建、读取、更新和删除操作” 选项。


本页展示了 JSON:API 模块 的 DELETE 请求示例。
启用删除操作
访问 /admin/config/services/jsonapi
并勾选“Accept all JSON:API create, read, update, and delete operations.”(接受所有 JSON:API 的创建、读取、更新和删除操作)选项。
