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

更新现有资源(PATCH)

04/09/2025, by Ivan

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

启用更新操作

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

jsonapi-accept-create-read-update-delete

认证

通常 PATCH 请求需要某种形式的认证。以下示例均使用基本认证(Basic Authentication)。启用 HTTP Basic Authentication 模块,为 API 用户(及其角色)设置权限,并在请求头的 'Authorization' 中设置编码后的用户名和密码。

此页面上的示例请求头需要一个用户名为 'api'、密码为 'api' 的 Drupal 用户。该用户必须具有更新所请求内容的权限。

请求头

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

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

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

  • Authorization: Basic VALUE

你可以在应用中通过命令行获取上面的 VALUE:

echo -n "USERNAME:PASSWORD" | base64 -w0

将返回的值放在 BASIC 之后。在本示例中,凭证 api:api 返回值为 YXBpOmFwaQ==,因此请求头应如下:

Authorization: Basic YXBpOmFwaQ==

基本 PATCH 请求

URL: http://example.com/jsonapi/node/article/{{article_uuid}}

请求体

{
  "data": {
    "type": "node--article",
    "id": "{{article_uuid}}",
    "attributes": {
      "title": "我的更新标题"
    }
  }
}

“id” 是必填项。添加需要更新的属性。

响应

HTTP 200 响应。响应体包含已更新实体的 JsonApi 响应。

PATCH 带更多属性

URL: http://example.com/jsonapi/node/article/{{article_uuid}}

请求体

{
  "data": {
    "type": "node--article",
    "id": "{{article_uuid}}",
    "attributes": {
      "title": "我的更新标题",
      "body": {
        "value": "更新后的正文内容",
        "format": "plain_text",
        "summary": "更新后的摘要"
      }
    },
    "relationships": {
      "uid": {
        "data": {
          "type": "user--user",
          "id": "{{user_uuid}}"
        }
      }
    }
  }
}

响应

HTTP 200 响应。响应体包含已更新的正文、摘要和作者。

PATCH 删除关系字段

{
  "data": {
    "type": "node--article",
    "id": "{{article_uuid}}",
    "attributes": {
      "title": "我的更新标题",
      "body": {
        "value": "更新后的正文内容",
        "format": "plain_text",
        "summary": "更新后的摘要"
      }
    },
    "relationships": {
      "my_entity_reference_field": {
        "data": {},
      }
    }
  }
}

响应

HTTP 200 响应。响应体包含已更新的正文、摘要,并且实体引用字段已被移除。

文章来源:Drupal 文档