本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
GraphQL 政策可以将 GraphQL 请求载荷解析为消息流变量,并且/或者根据 GraphQL 架构验证请求。
GraphQL 政策可以将 GraphQL 载荷解析为消息流变量,并且/或者针对架构验证 GraphQL 请求。
您可以使用 GraphQL 政策执行以下操作:
- 确保您的 API 仅处理符合您提供的架构的请求。
- 通过设置允许的片段数量上限来限制载荷。
- 将 GraphQL 与 API 产品相关联。
- 就像在 REST 中一样,利用 Oauth2、VerifyAPIKey 和配额政策功能。
GraphQL 支持以下类型的载荷:
- 符合
Content-Type : application/graphql
的 graphQL 载荷的 POST - 符合
Content-Type: applcation/json
的 graphQL 载荷的 POST - GraphQL 载荷的 GET,其中载荷是查询参数
如需查看 GraphQL 政策选项的快速摘要,请参阅下面的 GraphQL 选项。
如需详细了解 GraphQL,请参阅 GraphQL.org。
示例
以下示例展示了如何将 GraphQL 架构上传到 Apigee,并使用它来验证包含 GraphQL 内容的请求。
创建架构文件
如需运行该示例,请先创建一个包含以下内容的 GraphQL 架构文件:
type Query { allPersons(last: Int): [Person!]! } type Mutation { createPerson(name: String!, age: Int!): Person! } type Subscription { newPerson: Person! } type Person { name: String! sex: String! age: Int! posts: [Post!]! } type Post { title: String! author: Person! }
以您要使用的名称保存该文件,并在其后附加扩展名 .graphql
。
在 Apigee 界面中添加 GraphQL 政策
新版代理编辑器
首先,按如下方式创建 GraphQL 政策:
- 登录 Apigee 界面。
- 在导航栏中,依次选择开发 > API 代理。
- 在代理列表中,选择要为其使用 GraphQL 政策的 API 代理。
- 点击DEVELOP标签页。
- 在左侧窗格中,点击政策文件夹旁边的 + 按钮。
在创建政策对话框中,点击选择政策类型 (Select policy type) 字段,向下滚动到中介,然后选择 GraphQL。
输入显示名称和名称。
接下来,按如下方式选择 GraphQL 架构文件:
- 点击架构文件字段。此时会显示以下选项:
- 无架构。如果您选择此选项,Apigee 将不会使用架构来验证请求。
- 导入 GraphQL 架构 (.graphql)
选择导入 GraphQL 架构 (.graphql)。此时会显示以下内容:
点击选择文件,然后选择您之前创建的架构文件(必须具有扩展名
.graphql
)。该文件会显示在架构名称中字段。
- 点击架构文件字段。此时会显示以下选项:
- 点击创建以创建该政策。
现在您已创建了 GraphQL 政策,接下来可以将其附加到 PreFlow 中的步骤:
- 在左侧窗格中,依次选择“代理端点”(Proxy Endpoints) > 默认 > PreFlow:
- 点击可视化编辑器右下角PreFlow窗格中 PreFlow 旁边的 + 按钮:
- 在 Add policy step(添加政策步骤)对话框中,选择 GQL- 政策。
- 点击添加以附加该政策。
- 点击保存,保存当前修订版本以及您所做的更改。
- 如需部署更改,请点击概览标签页,然后选择部署。
如需了解您可以为 GraphQL 政策设置的选项,请参阅下面的 GraphQL 选项。
经典版代理编辑器
- 登录 Apigee 界面。
- 在导航栏中,依次选择开发 > API 代理。
- 在代理列表中,选择要为其使用 GraphQL 政策的 API 代理。
- 点击DEVELOP标签页。
在流:PreFlow 窗格中,点击添加步骤按钮。
在添加步骤窗格中,向下滚动到中介部分的底部,然后选择 GraphQL。
添加步骤窗格将显示以下选项:
- 显示名:政策的显示名。
- 名称:政策的内部名称。
- 架构文件:用于上传包含 GraphQL 架构的文件的选项,Apigee 将使用该架构来验证包含 GraphQL 内容的请求。
要使用架构,请执行以下操作:
- 点击架构文件字段。此时会显示以下选项:
- 无架构。如果您选择此选项,Apigee 将不会使用架构来验证请求。
- 导入 GraphQL 架构 (.graphql)
选择导入 GraphQL 架构 (.graphql)。此时会显示以下内容:
点击选择文件,然后选择您之前创建的架构文件(必须具有扩展名
.graphql
)。该文件会显示在架构名称字段中。
点击添加。流:PreFlow 窗格现在如下所示:
如需了解您可以为 GraphQL 政策设置的选项,请参阅下面的 GraphQL 选项。在此示例中,请保持这些选项不变。
如需部署代理,请点击概览标签页,然后选择部署。
现在,您可以使用以下 curl
命令测试 GraphQL 政策:
curl --location --request POST 'https://PROXY_BASEPATH/HOST_NAME' --data-raw 'query query_name {allPersons {name}}' -k
其中 PROXY_BASEPATH 是代理基本路径,HOST_NAME 是代理的名称(包括最新修订版本号)。运行该命令时,Apigee 会根据架构验证请求并返回以下输出。
{ "query query_name {allPersons {name}}": "", "id": 101 }
下面是另一个请求示例:
curl --location --request POST 'https://PROXY_BASEPATH/HOST_NAME' --data-raw 'query ilovegql {DEADBEEF}' -k
这一次请求验证失败,并显示以下错误消息。
{"fault":{"faultstring":"steps.graphQL.SchemaValidationFailed","detail":{"errorcode":"steps.graphQL.SchemaValidationFailed"}}}
GraphQL 选项
GraphPolicy 具有以下选项:
OperationType
:操作类型。选项包括:query
:RESTGET
操作的 GraphQL 等效项。mutation
:RESTPUT
操作的 GraphQL 等效项。query_mutation
:同时query
和mutation
。
MaxDepth
:查询的最大深度(以树状表示时)。借助MaxDepth
,您可以阻止载荷中的深度查询,这样 Apigee 就不需要创建非常大量的流变量来保存这些值。不过,无论MaxDepth
的值为何,载荷都会按原样发送。MaxCount
:载荷中可以存在的片段数上限。您可以利用此元素来防止客户的 GraphQL 后端服务器执行高度复杂的查询,从而强制客户端将逻辑拆分为较小的载荷。Action
:以下 GraphQL 操作之一:parse
Apigee 会将 GraphQL 载荷解析为流变量。您随后可以在 JavaCallout 等政策中使用流变量的内容。请注意,parse
还会验证载荷。verify
:Apigee 将验证 GraphQL 载荷是否符合上传到代理的架构。您可以使用verify
来确保不会收到不符合您架构的请求。这样可以在后端节省宝贵的 CPU 时间。parse_verify
:解析并验证载荷。
ResourceURL
:Apigee 用于验证 GraphQL 请求的 GraphQL 架构文件的路径。
如需详细了解这些选项,请参阅 GraphQL 政策参考页面。