2017-07-16 5 views
0

私のAPIにスキーマを定義しようとしています。私は、各リソースに多くの異なるセクションがあるという問題に取り掛かっています。理想的には、セクションがセクション内のすべての異なるモジュールを定義するのではなく、JSONオブジェクトであると言うことができるようにしたいと考えています。私はこれを行う方法がありますか?私の知る限り、あなたはカスタムJSONスカラーをインポートする必要がありますgraphql-toolsgraphql-toolsを使用したスキーマの定義

// Define your types here. 
const typeDefs = ` 

    type Resource { 
    id: ID, 
     title: String!, 
     slug: String!, 
     path: String!, 
     template: String!, 
     published: String!, 
     sections: Sections 
    } 

    type Sections { 
     // ... 
    } 

    type Query { 
     allLinks(filter: LinkFilter): [Link!]! 
     findResource(filter: ResourceFilter): [Resource!]! 
    } 

`; 
+0

ここではJSONスカラーが使えますが、注意が必要です.JSONスカラーの使用を開始した場合、GraphQLの利点の多くを失います。たとえば、そのオブジェクトの自動型チェックを取得しません(設定している場合)。 – helfer

答えて

1

を使用してJSON型定義があるようには思えません。 This moduleは、より一般的なものの1つです。

どこでもあなたのtypedefで、次の行を追加します。

scalar JSON 

そしてあなたはmakeExecutableSchemaに渡すresolversオブジェクト内部:警告の

const GraphqlJSON = require('graphql-type-json') 

const resolvers = { 
    Query: //queries 
    Mutation: //mutations 
    // All your other types 
    JSON: GraphqlJSON 
} 

一言:あなたのようにJSONを使ういつでもスカラー、あなたは柔軟性を失う。 GraphQLの魅力の1つは、クライアントが必要なフィールドだけをクエリできることです。 JSONを使用すると、クライアントはJSON全体を照会することも、照会することもできません。その一部を選択して選択することはできません。

+0

それはまさに私が感謝のために探しているものです。私はセクションセクションを選択する必要がないので、 'sections'レスポンスの柔軟性を失うことについてあまり心配していません。それらは常に一括して使用されます。 – Stretch0

関連する問題