操作请求格式
通过HTTP向路由器发送请求
默认情况下,几乎所有的GraphQL集成开发环境(IDE)和客户端库会负责以GraphOS Router或Apollo Router Core支持的数据格式发送操作。本文描述了该格式,该格式也在graphql.org和这个初步规范中进行了描述。
路由器支持通过POST请求发送的查询、变更和订阅。它还接受以GET请求发送的查询。
POST请求
路由器接收带有JSON主体的POST请求。一个有效的请求包含一个query
字段,以及可选的variables
和一个operationName
(如果query
包含多个可能的操作)。
假设我们想要执行以下查询:
query GetBestSellers($category: ProductCategory) {bestSellers(category: $category) {title}}
以下是为该查询提供一个有效POST请求体的示例:查询:
{"query":"query GetBestSellers($category: ProductCategory){bestSellers(category: $category){title}}","operationName": "GetBestSellers","variables": { "category": "BOOKS" }}
请注意,对于这个特定的请求体,operationName
不是必需的,因为 query
只包含一个 操作 定义。
您现在可以使用以下 curl
命令对Apollo托管示例服务器执行此查询:
curl --request POST \-H 'Content-Type: application/json' \--data '{"query":"query GetBestSellers($category:ProductCategory){bestSellers(category: $category){title}}", "operationName":"GetBestSellers", "variables":{"category":"BOOKS"}}' \https://rover.apollo.dev/quickstart/products/graphql
路由器的默认着陆页提供了一个 curl
命令,您可以使用此命令在您自己的服务器上执行测试 查询:
GET 请求
路由器还接受针对查询的GET请求(但不接受 mutations)。使用GET请求,查询详情(query
、operationName
、variables
)作为URL查询参数提供。variables
选项是一个URL编码的JSON对象。
以下是从 POST 请求 格式化用于 curl
GET 请求的同一查询:
curl --request GET \https://rover.apollo.dev/quickstart/products/graphql?query=query%20GetBestSellers%28%24category%3AProductCategory%29%7BbestSellers%28category%3A%20%24category%29%7Btitle%7D%7D&operationName=GetBestSellers&variables=%7B%22category%22%3A%22BOOKS%22%7D
持久查询协议
Apollo Router Core 和 持久查询列表(PQL)特性应用于 GraphOS Router 的 自动持久化查询(APQ)功能使用一个单独的协议来发送在 extensions
中存储的操作 文档信息。此协议还可以使用HTTP POST或GET。有关详细说明,请参阅 Apollo 客户端 的 APQ 协议文档。
相关主题
- 来自Apollo博客:使用HTTP方法制作GraphQL请求