gpt4 book ai didi

graphql - 使用 graphiql 检查远程 graphql 端点

转载 作者:行者123 更新时间:2023-12-02 17:44:51 25 4
gpt4 key购买 nike

有一个我不拥有的 graphql 端点,但它提供了一个公共(public)端点。我希望使用 graphiql 来反射(reflection)它。我对 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 构造函数中崩溃,试图从该内省(introspection)查询中创建一个模式。显然这不是正确的方法?

最佳答案

您想要根据内省(introspection)结果构建架构的是 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>;
};

这两个实用程序模块提供了更简单的方法,可以分别使用 buildClientSchemabuildASTSchema 从内省(introspection)查询结果或解析的 IDL 类型定义构建架构。请参阅 graphql-js/src/utilities 中的那些模块目录以获取更多信息。

关于graphql - 使用 graphiql 检查远程 graphql 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40451636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com