如何使用Swagger记录GraphQL?我们有一个庞大的后端REST API,最近部分开始使用GraphQL。为了记录API,我们使用Swagger。
问题是:如何使用Swagger(OpenAPI)来记录GraphQL端点?在Swagger或GraphQL的官方文件中绝对没有相关信息。
发布于 2021-12-23 08:15:22
我也有同样的要求。我基本上所做的就是把GraphQL描述成一个REST API -好吧,基本上它是:它是一个HTTP端点,它使用POST方法,它在主体中发布json数据,它接收json作为应答。
我发现用swagger记录所有的查询是不可能的,但有可能达到这样的程度,所以它是可用的。
这是我创建的swagger yaml:
swagger: "2.0"
info:
description: "Graphql swagger"
version: "1.0.0"
title: "Graphql swagger"
host: "my-graphql-host.com"
basePath: "/"
schemes:
- "https"
paths:
/api:
post:
summary: "GraphQL"
consumes:
- "application/json"
produces:
- "application/json"
responses:
"200":
description: "successful operation"
schema:
$ref: "#/definitions/GraphQLResponse"
parameters:
- in: body
name: body
description: "GraphQL query"
required: true
schema:
$ref: "#/definitions/GraphQLQuery"
definitions:
GraphQLQuery:
type: "object"
properties:
query:
type: "string"
GraphQLResponse:
type: "object"
properties:
data:
type: "object"这是此swagger文档的预览形式:

如您所见,它只描述了一个查询被接受,而没有描述哪些查询被接受。
因此,要执行查询,您需要将其转换为字符串并将其传递给正文。这意味着,执行以下查询:
query {
searchProducts(term: "MySearchTerm", language: EN) {
hits {
source {
id
Name
Number
}
}
}
}需要转换为
{
"query": "query { searchProducts(term: \"MySearchTerm\", language: EN) { hits { source { id Name Number } } }}"
}https://stackoverflow.com/questions/63834848
复制相似问题