2017-07-16 67 views
0

我想爲我的API定義我的模式。我遇到了每個資源都有很多不同部分的問題。理想情況下,我希望能夠說節是一個JSON對象,而不是定義節中的所有不同模塊。有什麼辦法可以做到這一點?據我所知,似乎沒有被使用graphql-tools用graphql-tools定義Schema

// 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標一JSON類型定義。 This module是可用的更受歡迎的之一。

任何地方在你的typedef,添加以下行:

scalar JSON 

然後是resolvers對象內傳遞給makeExecutableSchema

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

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

一個提醒一句:在你使用JSON作爲標量,你失去了靈活性。 GraphQL的部分魅力在於它允許客戶端只查詢他們需要的字段。當你使用JSON時,你的客戶端只能查詢整個JSON塊,或者根本不能 - 他們將無法挑選和選擇它的一部分。

+0

這正是我要找的感謝。我並不太擔心因爲我不需要選擇單個部分,而放棄'節'響應的靈活性。它們總是一起使用。 – Stretch0