使用 graphiql 检查远程 graphql 端点
Inspecting a remote graphql endpoint with graphiql
有一个不属于我的 graphql 端点,但它提供了一个 public 端点。我希望使用 graphiql 来反省它。我是 graphql 的新手,所以我什至不知道这种事情是否可行。
我有 graphiql example running locally and am modifying 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 构造函数中爆炸,试图从该内省查询中创建一个模式。显然这不是正确的方法?
您想根据内省结果构建模式是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 目录中的那些模块以获取更多信息。
我正在尝试使用 PHP GraphQL 库。我在围绕 CORS(跨源安全性东西)进行上述试验时遇到了很多问题。
然后我发现 GraphIQL 可以作为 Chrome 应用程序使用。这解决了我的需要,所以在这里注明以防对遇到此问题的任何其他人有用。您无需进行任何编码即可让 GraphIQL 使用远程端点。
有一个不属于我的 graphql 端点,但它提供了一个 public 端点。我希望使用 graphiql 来反省它。我是 graphql 的新手,所以我什至不知道这种事情是否可行。
我有 graphiql example running locally and am modifying 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 构造函数中爆炸,试图从该内省查询中创建一个模式。显然这不是正确的方法?
您想根据内省结果构建模式是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 目录中的那些模块以获取更多信息。
我正在尝试使用 PHP GraphQL 库。我在围绕 CORS(跨源安全性东西)进行上述试验时遇到了很多问题。
然后我发现 GraphIQL 可以作为 Chrome 应用程序使用。这解决了我的需要,所以在这里注明以防对遇到此问题的任何其他人有用。您无需进行任何编码即可让 GraphIQL 使用远程端点。