原理很簡單,就是使用swagger api 生成schema 而後代理請求處理api 調用node
參考項目 https://github.com/rongfengliang/streamsets-graphql-apigit
package.json: { "name": "restapi", "version": "1.0.0", "main": "index.js", "license": "MIT", "dependencies": { "babel-polyfill": "^6.26.0", "compression": "^1.7.3", "express": "^4.16.3", "express-graphql": "^0.6.12", "graphql": "^0.13.2", "swagger-to-graphql": "^1.4.0" }, "scripts": { "start":"node app" } } app.js require('babel-polyfill'); const express = require('express'); const app = express(); const graphqlHTTP = require('express-graphql'); const graphQLSchema = require('./lib'); const compression = require('compression'); app.use(compression()); // 修改成對應的server 用戶以及地址 const proxyUrl = 'http://admin:admin@localhost:18630/rest'; const pathToSwaggerSchema = `${__dirname}/api/swagger.json`; // 此處比較重要由於接口是gzip 能夠進行內容協商,不使用gzip const customHeaders = { "accept-encoding": "identity" }; graphQLSchema(pathToSwaggerSchema, proxyUrl, customHeaders).then(schema => { app.use('/graphql', graphqlHTTP(() => { return { schema, graphiql: true }; })); app.listen(3009, '0.0.0.0', () => { console.info('http://localhost:3009/graphql'); }); }).catch(e => { console.log(e); });
https://github.com/rongfengliang/streamsets-graphql-apigithub