我可以从GraphQL架构生成REST服务吗?

时间:2018-01-05 14:58:16

标签: python django django-rest-framework graphql graphene-python

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

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

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

2 个答案:

答案 0 :(得分:1)

如果您唯一的问题是客户端没有专用客户端,并且您可以使用长网址,则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
  });
});

答案 1 :(得分:1)

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

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

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