如何使用Swagger记录GraphQL?
我们有一个庞大的后端REST API,最近部分开始使用GraphQL。为了记录API,我们使用Swagger。
问题在于:如何使用Swagger(OpenAPI)记录GraphQL终端点?Swagger或GraphQL的官方文档中完全没有相关信息。
如何使用Swagger记录GraphQL?
我们有一个庞大的后端REST API,最近部分开始使用GraphQL。为了记录API,我们使用Swagger。
问题在于:如何使用Swagger(OpenAPI)记录GraphQL终端点?Swagger或GraphQL的官方文档中完全没有相关信息。
GraphQL API通常通过GraphQL服务器本身提供的文档设施进行文档化,包括类型系统和类型和字段的描述。像GraphQL playground这样的工具允许您通过在可视化文档树中单击/搜索或通过IDE功能(自动完成+工具提示)来探索API文档。这主要是公司公开其GraphQL API的方式。一些公司还公开Swagger类似的文档(例如GitHub v4 API docs)。这个工具可以为您的API创建这种文档。
另一方面,Swagger解决了REST API的这个问题。因此Swagger是为不同的生态系统构建的。Swagger为REST添加了在GraphQL中即插即用的功能。因此据我所知,两者之间没有尝试创建兼容性。有一些工具可以将Swagger / OpenAPI REST端点公开为GraphQL查询,这对于您的转换期可能很有趣。
https://my.api.com/graphql
。现在他们可以使用我提供的桌面应用程序"GraphQL Playground",把这个链接放进去,开始探索API文档。GraphQL是自我说明的,这意味着通过构建服务器并向字段添加"description",一个GraphQL客户端可以发起元查询,获取有关API工作方式的所有信息。 - Herkuswagger: "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"
query {
searchProducts(term: "MySearchTerm", language: EN) {
hits {
source {
id
Name
Number
}
}
}
}
需要转换为
{
"query": "query { searchProducts(term: \"MySearchTerm\", language: EN) { hits { source { id Name Number } } }}"
}
很遗憾,截至2021年5月,目前没有标准的方式能够在Swagger-UI中展示GraphQL端点或链接到GraphiQL UI。
由于GraphQL正与REST竞争,大多数GraphQL供应商希望开发人员用GraphQL替换REST,而不仅仅是用GraphQL进行(只读)查询。
希望随着GraphQL被更广泛地采用,并且人们对它的优缺点有了更好的认识,从两者中使用更好的部分会得到更加平衡的视角。
OpenAPI-to-GraphQL是一个将OpenAPI规范(OAS)或Swagger描述的API转换为GraphQL的工具。
OpenAPI-to-GraphQL有两种使用方式:
命令行界面(CLI)
命令行界面(CLI)提供了一种方便的方式来启动一个GraphQL服务器,包装给定OpenAPI规范的API:
使用以下命令安装OpenAPI-to-GraphQL CLI:
npm i -g openapi-to-graphql-cli
然后,运行OpenAPI-to-GraphQL命令并指向一个OpenAPI规范:
openapi-to-graphql [options]
更多详细信息,请参考openapi-to-graphql-cli文档。
库
在应用程序中使用OpenAPI-to-GraphQL作为库,生成GraphQL模式。
安装OpenAPI-to-GraphQL作为依赖项:
npm i -s openapi-to-graphql
Require OpenAPI-to-GraphQL and use the createGraphQLSchema function:
const { createGraphQLSchema } = require("openapi-to-graphql");
// load or construct OAS (const oas = ...)
const { schema, report } = await createGraphQLSchema(oas);
更多详细信息,请参考openapi-to-graphql-cli文档。