2017-07-16 68 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