2017-04-18 6 views
5

私はこの偉大な要旨を読んでいた - GraphQLInterfaceTypeGraphQLでは、 `interfaces`機能をたくさん使うとき` resolveType`と `isTypeOf`をどう扱うのですか?

しかし、まだいくつかの混乱があります。

  1. はすべてGraphQLスキーマタイプについてES6 classesを定義することは本当に必要ですか?
    • ここで主な関心事は:ES6 classesの空きがあり、それに相当する量がGraphQL typesとなることです。
  2. そうでない場合は、interfacesを使用する場合、適切resolveTypeisTypeOfを処理する方法をたくさん備えて?
  3. GraphQL typesについてもすべてES6 classesを定義しましたが、生データはgrpc+protobufのような異なる技術で別の場所に構築されています。isTypeOf: (value) => value instanceof Dogはここでどのように機能しますか?

答えて

3

resolveTypeisTypeOfの実装は非常に柔軟性があり、アプリケーション固有のものです。それは、データベース、データモデル、どのように似ているかによって異なりますタイプは、そうです。一部のバックエンドでは、特にORMを使用している場合は、データベースにクエリを実行するときにそれらのクラスのインスタンスを作成する場合、すべてのモデルに対して個別のES6クラスが存在する場合があります。しかし、ORMは必要ありません。また、GraphQL型を理解するために他のクラスをインスタンス化する必要はありません。

場合によっては、オブジェクトのプロパティからタイプを判別することもできます。これがあなたのアプリに当てはまらない場合は、ヒントを与えるためにできることがあります。ここにSQLの例があります。 resolveTypeを実装する単純なプロパティ検索されるように

SELECT 
    id, 
    body, 
    author_id, 
    post_id, 
    'Comment' AS "$type" -- leave a hint to resolve the type 
FROM comments 
UNION 
SELECT 
    id, 
    body, 
    author_id, 
    NULL AS post_id, 
    'Post' AS "$type" -- leave a hint to resolve the type 
FROM posts 

このクエリでは、「型ヒント」、追加的な計算列を提供します。他のDBMSも同様の戦略を使用できます。

関連する問題