logo

Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll
04/09/2025, by Ivan

简而言之:使用类似 ?include=field_comments.uid 的查询字符串,可以一次性包含 field_comments 引用的所有实体,以及这些实体上 uid 引用的所有实体!


JSON:API 通过允许你指定关系路径并将其包含在响应文档中,帮助你减少 HTTP 请求。如何实现呢?

获取单个资源

获取文章

假设你有一篇带有两条评论的文章,并且这两条评论的作者是同一个人。如果不使用 includes,要获取这些数据,你需要先请求 GET /jsonapi/node/article/some-random-uuid

04/09/2025, by Ivan

分页可能是一个看似简单却复杂的话题。很容易陷入陷阱而没有遵循最佳实践。本页将帮助你“正确”地实现分页。换句话说,如果你阅读并理解本页的内容,我们认为你的客户端会更加健壮、具有前瞻性,并且让你未来的开发更轻松。

如果你只记住本指南中的一件事,那就是:不要自己构造分页 URL

JSON:API 模块返回的每个分页响应中,已经包含了指向集合下一页的链接,你只需使用该链接即可。

在本文开头,我们将介绍 API 的一些重要特性,以及如何“正确”实现分页。在文末,你会找到一些常见问题与陷阱的解答

如何实现?

JSON:API 模块返回的每个分页响应中都内置了分页链接。下面是一个小示例:

04/09/2025, by Ivan

JSON:API 使得在单个请求中检索多个资源成为可能,这些路由称为“集合(collection)”路由。可以通过向基础资源路由发送 GET 请求来获取资源集合,例如 GET /jsonapi/node/article,并且包含 UUID。默认情况下,这将包含指定类型的所有资源。

过滤和排序在所有标准资源上默认可用。

请求头

以下请求头在所有 GET 请求中都是必须的,以确保 JSON:API 请求和响应的正确性。

  • Accept: application/vnd.api+json
  • Content-Type: application/vnd.api+json

以下请求头在示例中需要使用:

04/09/2025, by Ivan

本节包含每种请求类型的示例和信息: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 创建、读取、更新和删除操作” 选项。

04/09/2025, by Ivan

此页面展示了 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}}

04/09/2025, by Ivan

此页面展示了 JSON:API 模块 的各种 POST 请求示例。

POST 请求用于创建新资源。如果需要修改资源,请使用 PATCH。

JSON:API 规范(因此 JSON:API 模块)仅支持每个 POST 请求创建一个资源。对于 Drupal,这意味着无法(仅使用该模块)在一个请求中创建多个实体。如果你想在创建父实体的同时创建被引用的实体,就需要这种功能。虽然 JSON:API 不支持此行为,但像 Subrequests 这样的模块可以帮助实现。

启用创建操作

访问 /admin/config/services/jsonapi
并勾选 “接受所有 JSON:API 创建、读取、更新和删除操作” 选项。