2016-04-20 11 views
0

Ich plane, Angular2 mit GraphQL zu verwenden. Ich suche nach einer Möglichkeit, GraphQL-Modell auf dem Client zu verwenden, um Abfragen dynamisch zu erstellen. Wie kann ich diese Idee umsetzen?GraphQL Isomorphic Modell

GraphQL Modell sieht aus wie

exports default new GrapqhQLObjectType({ 
name: 'User', 
description: 'A user type in our application', 
fields:() => { 
    _id:{ 
    type: new GraphQLNonNull(GraphQLID) 
    }, 
    name:{ 
    type: new GraphQLNonNull(GraphQLString) 
    }, 
    surname:{ 
    type: new GraphQLNonNull(GraphQLString) 
    }, 
    age: { 
    type: GraphQLInt 
    } 
    } 
    }); 

Alle Datentypen aus GraphQL.JS importieren

I-Daten-Datentypen auf dem Client von diesem GraphQL Modell validieren möchten.

GraphQL Abfrage sieht aus wie

mutation RootMutation { 
editUser (name: "Bjarne", age:64) { 
    name 
    surname 
    _id 
    age 
} 
} 

ich in Angular2 Daten Alter Wert geändert, und ich möchte oben beantragen wurde

+0

Können Sie ein bisschen mehr ausarbeiten? Es könnte Menschen, die Angular2, aber nicht GraphQL oder umgekehrt kennen, eine Antwort geben. –

Antwort

0

Eine Möglichkeit, automatisch erzeugt, das zu tun wäre, um das Schema mit GraphQL der Selbstbeobachtung introspect Abfrage wird als String gesendet (siehe unten). Sie können die Typüberprüfung in der systemeigenen Anwendung auf diese Weise durchführen, indem Sie den vom Schema zurückgegebenen Typ überprüfen. Darüber hinaus können Sie mithilfe von GraphiQL (https://github.com/graphql/graphiql) eine Anfrage senden, um sicherzustellen, dass Ihre Anfrage/Mutation korrekt ist, bevor Sie sie in Ihre App aufnehmen.

query IntrospectionQuery { 
__schema { 
queryType { name } 
mutationType { name } 
subscriptionType { name } 
types { 
...FullType 
} 
directives { 
name 
description 
locations 
args { 
...InputValue 
} 
} 
} 
} 
fragment FullType on __Type { 
kind 
name 
description 
fields(includeDeprecated: true) { 
name 
description 
args { 
...InputValue 
} 
type { 
...TypeRef 
} 
isDeprecated 
deprecationReason 
} 
inputFields { 
...InputValue 
} 
interfaces { 
...TypeRef 
} 
enumValues(includeDeprecated: true) { 
name 
description 
isDeprecated 
deprecationReason 
} 
possibleTypes { 
...TypeRef 
} 
} 
fragment InputValue on __InputValue { 
name 
description 
type { ...TypeRef } 
defaultValue 
} 
fragment TypeRef on __Type { 
kind 
name 
ofType { 
kind 
name 
ofType { 
kind 
name 
ofType { 
kind 
name 
} 
} 
} 
}