Page 1 of 1

会发生什么情况?

Posted: Thu Dec 26, 2024 10:44 am
by hasnasadna
JSON:API Extras 是 JSON:API 的一个助手。 JSON:API 完成大部分工作,Extras 负责整理细节。默认情况下端点是/jsonapi?通过 Extras,我们可以将其更改为我们想要的任何内容。默认情况下所有实体都公开吗?通过 Extras,我们可以决定哪些不显示,等等。

Extras 是一个contrib模块,允许我们更严格地定义我们想要公开的内容以及方式。详细来说,我们可以:

更改端点前缀,例如从/jsonapi更改为/api;
决定显示实体集合中的计数器;最重要的是
覆盖每个公开资源的行为。
特别是,在最后一点:对于每个资源,可以更改公开的 新西兰电报数据 名称、路径、定义可用字段或完全禁用它。例如,如果我们没有兴趣暴露网站上的用户,我们可以决定通过 Extras 将他们从 JSON:API 中删除。所有这些都可以直接从管理面板进行管理,无需编写特定代码。

我们已经看到,当在端点上指定资源的唯一 ID 时,Drupal 就会公开资源。但是,如果我们的前端不知道它必须调用的实体的 id,而只知道路径别名,

解耦路由器
解耦路由器使我们能够准确地解决这种情况。 De Coupled Router 是另一个contrib模块,它是 JSON:API 生态系统的一部分,允许您通过路径别名而不是通过 uuid 检索资源。

实际上,它的工作原理如下:激活模块后,您可以将资源请求发送到特定路径/router/translate-path?path=,连接所需资源的路径别名。然后,该模块负责在站点内容中搜索资源,并遵循任何重定向,直到检索到资源标识符。此时,它返回的页面不直接包含资源,而是包含资源的 JSON:API URL。

因此,例如,通过在我们的项目中向/router/translate-path?path=/books/flowers-algernon发出 GET 请求,我们将返回一个包含带有资源 uuid 的 URL 的页面,我们可以使用该页面恢复我们需要的数据。

显然这里仍然存在一个问题,即双重请求的问题: - 第一个请求检索 URL,第二个请求检索实体。正是在这一点上,子请求模块为我们提供了帮助。至此,我们已经完成了项目功能的浏览。

子请求
子请求允许您将多个请求聚合到单个 POST 中,并由 Drupal 独立解析它们,然后返回单个响应。在我们的案例中,我们特别感兴趣的是,即使一个请求依赖于前一个请求的响应,该模块也允许我们聚合请求,从而避免了必须进行两次或多次调用才能获取单个资源的问题。

子请求通过向/subrequests端点发送 POST 来工作; POST 的正文必须包含要执行的子请求的蓝图。