2016-11-06 6 views
3

私は所有していないがパブリックエンドポイントを提供するgraphqlエンドポイントがあります。私はgraphiqlを使ってそれをイントロスペクトすることを望んでいます。私は完全に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コンストラクタで吹きます。明らかにそれは正しいアプローチではありませんか?あなたはイントロスペクションの結果のうち、スキーマを構築したい何

答えて

3

buildClientSchemaです:buildASTSchemaと直接GraphQLSchemaインスタンス、あなたはアウトしようとしているされているもの:

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); 

あなたは他の二つの方法でスキーマを構築することができます。 GraphQLSchemaコンストラクタはGraphQLSchemaConfig型とオブジェクトを取り込む:

type GraphQLSchemaConfig = { 
    query: GraphQLObjectType; 
    mutation?: ?GraphQLObjectType; 
    subscription?: ?GraphQLObjectType; 
    types?: ?Array<GraphQLNamedType>; 
    directives?: ?Array<GraphQLDirective>; 
}; 

そして、これら二つのユーティリティモジュールは、それぞれbuildClientSchema又はbuildASTSchemaを使用して、イントロスペクションクエリ結果または解析IDL型定義のいずれかからのスキーマを構築するための簡単な方法を提供します。詳細については、graphql-js/src/utilitiesディレクトリのモジュールを参照してください。

+0

それがうまくいった!私は 'buildClientSchema(introspectionResult.data)'をしなくてはなりませんでした。 –

+0

これで、graphiqlを使用してそのエンドポイントにクエリーをポストバックする方法があります... –

+0

これについては、ここにあるindex.htmlコードの例をご覧ください:https://github.com/graphql/ graphiql/blob/master/example/index.html#L95 –

0

私はこれをPHP GraphQLライブラリで試していました。私は上記のCORS(クロスオリジンセキュリティのもの)の周りを試して、多くの問題にぶつかりました。

次に、GraphIQLがChromeアプリとして利用可能であることが判明しました。それが私の必要性を解決したので、この問題を克服する他の誰かにとって有用な場合にはここに留意してください。 GraphIQLをリモートエンドポイントで使用するには、コーディングを行う必要はありません。

関連する問題