我可以从 GraphQL 模式生成 REST 服务吗?

Can I generate a REST service from a GraphQL schema?

我想构建一个同时具有 GraphQL 端点和 REST API 的 Django 应用程序。分别维护两者会很痛苦;我正在寻找一种只维护 GraphQL 服务并自动生成 REST 端点的好方法。

有人知道这样做的好方法吗?

我知道有一些方法可以在 REST 端点之上构建 GraphQL 服务器,但我宁愿采用相反的方式,因为 REST API 要求将来可能会消失。

如果您唯一的问题是在客户端没有专门的客户端,并且您可以使用长 url,那么您的 graphql 端点 您的 RESTlike API。免责声明:未经测试的代码仅用于教育目的;)

阅读所有 posts:

GET /api/posts
=>
GET /graphql?query={posts{id title body}}

创建 post

POST /api/posts
{ "title": "Hello", "body": "world" }
=>
POST /graphql?query=mutation m($title:String!,$body:String!){createPost(title:$title,body:$body){id title body}
{ "variables": { "title": "Hello", "body": "world" } }

然后您的代码可以以类似 REST 的方式工作(想象一下调用 REST APIs 的 redux 操作)。

如果你想要更多关于服务器的东西,你可以轻松地反转你在这里描述的内容:

I know there are ways to build a GraphQL server on top of REST endpoints,

您可以构建一个代理,将您的 REST 查询重写为 GraphQL 查询。这可能比将 REST 端点映射到 GraphQL 容易得多,因为您的 GraphQL API 更强大。

一些 node.js 表示代码,因为我不知道 python :(

const Lokka = require('lokka').Lokka;
const Transport = require('lokka-transport-http').Transport;
const express = require('express');

const client = new Lokka({
  transport: new Transport('...')
});

const app = express();
app.get('/api/posts', (req, res) => {
  client.query('{posts{id title body}}').then(result => {
    res.status(200).send(result);
  }).catch(error => {
    res.status(500).end(); // Or other error handling
  });
});

如果您不介意使用 Node.js,可以使用一个库 (graphql2rest):https://github.com/sisense/graphql2rest

您可以使用它从现有的 GraphQL 模式自动生成 REST API。

"GraphQL2REST is a Node.js library that reads your GraphQL schema and a user-provided manifest file and automatically generates an Express router with fully RESTful HTTP routes — a full-fledged REST API."