有一个我不拥有的graphql端点,但它提供了一个公共端点。我希望用graphiql来反省它。我对graphql来说是全新的,所以我甚至都不知道这种事情是否可行。
我在本地运行graphiql example并正在修改server.js以尝试使其正常运行。在其他SO线程中探索已经让我这么远......
var introspectionQuery = require('graphql/utilities').introspectionQuery;
var request = require('sync-request');
var url = 'http://endpoint.com/graphql';
var response = request('POST', url, { qs: { query: introspectionQuery } } );
var schema = JSON.parse(response.body.toString('utf-8'));
// herein lies the rub
schema = new GraphQLSchema(schema.data.__schema);
var app = express();
app.use(express.static(__dirname));
app.use('/graphql', graphqlHTTP(() => ({
schema: schema,
})));
app.listen(8080);
此代码在GraphQLSchema构造函数中爆炸,尝试从该内省查询中创建一个模式。显然,这不是一个正确的方法吗?
答案 0 :(得分:4)
您想要在内省结果中构建模式的是buildClientSchema
:
var buildClientSchema = require('graphql/utilities').buildClientSchema;
var introspectionQuery = require('graphql/utilities').introspectionQuery;
var request = require('sync-request');
var response = request('POST', url, { qs: { query: introspectionQuery } });
// Assuming we're waiting for the above request to finish (await maybe)
var introspectionResult = JSON.parse(response.body.toString('utf-8'));
var schema = buildClientSchema(introspectionResult);
您可以通过其他两种方式构建架构:buildASTSchema
并直接实例化GraphQLSchema
,这就是您要尝试的内容。 GraphQLSchema
构造函数接受GraphQLSchemaConfig
类型的对象:
type GraphQLSchemaConfig = {
query: GraphQLObjectType;
mutation?: ?GraphQLObjectType;
subscription?: ?GraphQLObjectType;
types?: ?Array<GraphQLNamedType>;
directives?: ?Array<GraphQLDirective>;
};
这两个实用程序模块分别通过使用buildClientSchema
或buildASTSchema
从内省查询结果或解析的IDL类型定义提供了更简单的方法来构建模式。有关详细信息,请参阅graphql-js/src/utilities目录中的那些模块。
答案 1 :(得分:0)
我正在尝试使用PHP GraphQL库。我尝试了上面围绕CORS(跨源安全性的东西)的许多问题。
然后我发现GraphIQL可用作Chrome应用。这解决了我的需要,所以请注意这里,以防其他遇到此问题的人有用。您无需进行任何编码即可使GraphIQL与远程端点一起使用。