1

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

有谁知道这样做的好方法?

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

4

2 回答 2

1

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

阅读所有帖子:

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

创建帖子

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 API 的 redux 操作)。

如果您想要更多关于服务器的内容,您可以轻松地反转您在此处描述的内容:

我知道有一些方法可以在 REST 端点之上构建 GraphQL 服务器,

您可以构建一个代理,将您的 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
  });
});
于 2018-01-06T16:19:25.190 回答
1

如果你不介意使用 Node.js,有一个库可以做到这一点(graphql2rest):https ://github.com/sisense/graphql2rest

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

“GraphQL2REST 是一个 Node.js 库,它可以读取您的 GraphQL 架构和用户提供的清单文件,并自动生成一个具有完全 RESTful HTTP 路由的 Express 路由器——一个成熟的 REST API。”

于 2020-05-31T12:37:17.327 回答