use*_*662 9 documentation rest swagger graphql openapi
如何使用 Swagger 记录 GraphQL?我们有一个庞大的后端 REST API,它最近部分开始使用 GraphQL。为了记录 API,我们使用 Swagger。
问题是:如何使用 Swagger(OpenAPI) 来记录 GraphQL 端点?Swagger 或 GraphQL 的官方文档中绝对没有相关信息。
Her*_*rku 13
GraphQL API 通常通过 GraphQL 服务器本身提供的文档工具来记录:类型系统以及类型和字段的描述。像GraphQL playground这样的工具可以让您通过在可视化文档树中单击/搜索或通过类似 IDE 的功能(自动完成 + 工具提示)来探索 API 文档。这主要是公司公开其公共 GraphQL API 的方式。一些公司还公开了 swagger 之类的文档(例如Github v4 API 文档)。此工具可以为您的 API 创建这样的文档。
另一方面,Swagger 为 REST API 解决了这个问题。因此,Swagger 是为不同的生态系统构建的。Swagger 向 REST 添加了在 GraphQL 中开箱即用的功能。因此,据我所知,任何一方都没有尝试创建兼容性。有一些工具可以将 Swagger/OpenAPI REST 端点公开为 GraphQL 查询,这在您的过渡期可能会很有趣。
我只是有同样的要求。我基本上所做的是将 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"
Run Code Online (Sandbox Code Playgroud)
这个 swagger 文档的预览如下所示:
正如您所看到的,它只描述了一个查询被接受,但没有描述哪些查询。
因此,要执行查询,您需要将其转换为字符串并将其传递给主体。这意味着以下查询:
query {
searchProducts(term: "MySearchTerm", language: EN) {
hits {
source {
id
Name
Number
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
需要转化为
query {
searchProducts(term: "MySearchTerm", language: EN) {
hits {
source {
id
Name
Number
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,截至 2021 年 5 月,还没有标准方法可以显示 GraphQL 端点或从 Swagger-UI 链接到 Graph i QL UI。
由于 GraphQL 正在与 REST 竞争,因此大多数 GraphQL 供应商希望开发人员用 GraphQL 替换 REST,而不仅仅是使用 GraphQL 进行(只读)查询。
希望当 GraphQL 得到更广泛的采用并且更好地理解它的优点和缺点时,一个更平衡的观点将是使用两者中更好的部分。
| 归档时间: |
|
| 查看次数: |
17411 次 |
| 最近记录: |