组件与动态区域不再返回 id

页面摘要: 在 Strapi 5 中,组件与动态区域在 REST API 响应中不再返回 id,从而无法进行部分更新,需要改为发送完整的组件对象。

在 Strapi 5 中,组件与动态区域使用 REST API 请求时不再返回 id,因此无法对其进行部分更新。

本页面是破坏性变更数据库的一部分,提供有关该破坏性变更的信息,以及从 Strapi v4 迁移到 Strapi 5 的附加说明。

破坏性变更说明

在 Strapi v4 中

在 Strapi v4 中,你可以传入组件的 id 来部分更新该组件。

在 Strapi 5 中

REST API 中组件与动态区域的响应不包含 id,因此无法对它们进行部分更新。

迁移

本节汇总了关于该破坏性变更的有用说明和操作步骤。

说明

  • 在 Strapi v4 中,你可以发送以下请求,这些请求会返回组件的 id:

    // 1. GET /category/:id
    category = fetch(...)
    
    // 2. PUT /category/:id
    {
    data: {
      name: 'category-name',
      // 通过其 id 更新组件
      component: {
        id: category.component.id // 使用第 1 步中收到的 id
        value: 'value' 
      }
    }
    }
    

    因此,你可以指定组件的 id 来更新 value 字段。

  • 在 Strapi 5 中:

    • 草稿与发布 功能已重构,文档 可以同时拥有草稿版本和已发布版本。
    • 内容 API 的默认行为是返回已发布的数据,例如 PUT /category/:id 可用于更新文档的草稿版本并将其发布。
    • REST API 响应返回的是已发布版本,因此使用 id 会试图用已发布版本的唯一标识符去更新组件或动态区域的草稿版本,而这是无法做到的。
    • 试图部分更新组件将导致以下错误:Some of the provided components in component are not related to the entity。
  • 此破坏性变更仅影响 REST API,不影响 文档服务 API,因为文档服务 API 默认返回文档的草稿版本。这也使得在内容管理器中部分更新组件或动态区域成为可能。

手动操作步骤

更新你的自定义代码,在调用 REST API 时发送要更新的完整组件。