我想用GraphQL端点和REST API构建一个Django应用程序。单独维护两者都会带来太大的痛苦;我正在寻找一种只维护GraphQL服务并自动生成REST端点的好方法。
有没有人知道这样做的好方法?
我知道有一些方法可以在REST端点之上构建一个GraphQL服务器,但我反过来说,因为REST API要求可能在将来消失。
答案 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。”