# Apollo 服务器 v3 升级到 Apollo 服务器 v4

> Source: https://strapi.nodejs.cn/cms/migration/v4-to-v5/breaking-changes/upgrade-to-apollov4

🌐 Apollo Server v3 upgraded to Apollo Server v4

Strapi 5 将 Apollo Server 从 v3 升级到 v4，将 GraphQL 从 v15 升级到 v16，需对错误处理、CSRF 防护和插件配置进行迁移更新。

🌐 Strapi 5 upgrades Apollo Server from v3 to v4 and GraphQL from v15 to v16, requiring migration updates to error handling, CSRF prevention, and plugin configuration.

Strapi 5 已迁移到 Apollo Server v4，这可能需要一些手动迁移步骤。

🌐 Strapi 5 has migrated to Apollo Server v4 and this might require some manual migration steps.

此页面是[重大更改数据库](/cms/migration/v4-to-v5/breaking-changes)的一部分，提供关于重大更改的信息以及从 Strapi v4 迁移到 Strapi 5 的附加说明。

🌐 This page is part of the [breaking changes database](/cms/migration/v4-to-v5/breaking-changes) and provides information about the breaking change and additional instructions to migrate from Strapi v4 to Strapi 5.

- Is this breaking change affecting plugins? Yes
- Is this breaking change automatically handled by a codemod? No

## 重大变更描述 {#breaking-change-description}

🌐 Breaking change description

**在 Strapi v4 中**

GraphQL 服务器的 Apollo Server v3 和 GraphQL 模块的 graphql ^15。

🌐 Apollo Server v3 for the GraphQL server and graphql ^15 for the GraphQL module.

**在 Strapi 5 中**

GraphQL 服务器的 Apollo Server v4 和 GraphQL 模块的 graphql ^16。

🌐 Apollo Server v4 for the GraphQL server and graphql ^16 for the GraphQL module.

## 迁移 {#migration}

🌐 Migration

本节重新组合了有关引入的重大更改的有用说明和程序。

🌐 This section regroups useful notes and procedures about the introduced breaking change.

### 注意 {#notes}

🌐 Notes

- 由于 Apollo 在 v4 中引入了破坏性更改，Strapi 会在 Apollo Server 配置中自动设置 `status400ForVariableCoercionErrors: true`。在 Apollo v5 中，这一行为将再次成为默认设置。
- Strapi 5 将 graphql 包从 ^15 升级到 ^16，而在任何项目中只能包含一个版本。因此，依赖于 graphql:15 的用户代码或插件需要使用与 Strapi 相同的版本范围。
- 有关升级到 Apollo Server v4 的指导，请参阅以下《手动迁移》部分。有关更详细的信息，请查阅 [Apollo v4 migration](https://www.apollographql.com/docs/apollo-server/migration/) 文档。

### 手动迁移 {#manual-migration}

🌐 Manual migration

要迁移到 Strapi 5：

🌐 To migrate to Strapi 5:

- 通过设置 `x-apollo-operation-name` 头或在 GraphQL 插件多部分消息（文件上传）配置中添加 `csrfPrevention: false` 来禁用新的保护。
- 将 `ApolloError` 替换为 `GraphQLError`。
- 移除根级配置选项如 `formatResponse`，并在 plugins 数组中用插件钩子替代它们。
- 移除模块配置选项，并将其拆分为 `typeDefs` 和 `resolvers`。
- 将 `debug` 替换为 `includeStacktraceInErrorResponses`。
