2017-12-25 3 views
1

Ich bin auf GraphQL mit Apollo + Express dem ersten Schritte und ich sehe, dass the example einen schema Namen an der Unterseite des typedefs fügt hinzu:Was ist `Schema` Typedef in GraphQL?

let typeDefs = [` 
type Query { 
    hello: String 
} 

schema { 
    query: Query 
}`]; 

Und nach der Definition der Resolver das Schema mit makeExecutableSchema erzeugt:

let schema = makeExecutableSchema({typeDefs, resolvers}); 

Allerdings, wenn ich den schema Teil des typedefs entfernen kann ich immer noch meinen Endpunkt normalerweise verwenden, zB:

http://localhost:3000/graphql/?query={hello} 

kehrt:

{"data":{"hello":"world"}} 

Aber wenn ich die Abfrage Teil für etwas anderes zu ändern, der Server ausfällt:

let typeDefs = [` 
type Query { 
    hello: String 
} 

schema { 
    testquery: Query 
}`]; 

GraphQLError: Syntax Error: Unexpected Name "testquery"

Ich habe durch Apollo's tutorial pages und auch die How To GraphQL tutorial for Node.js + GraphQL lesen, kann aber nicht finden Sie eine Referenz zu diesem schema Teil.

Wofür wird es verwendet?

Antwort

0

über das Schema

Ein Schema kann bis zu drei Wurzeloperationstypen, aber es erfordert nur einen. Der Abfragetyp muss in jedem Schema vorhanden sein und ein Objekttyp sein (Spec). Dieser Typ ist der Stammtyp bei Abfragen von GraphQL. Außerdem gibt es einen Mutationsstammtyp, der bei Mutationen verwendet wird. Die neueste Ergänzung ist der Abonnementtyp.

Über Wurzeltypen

Wurzeltypen sind einfache Objekttypen. Sie können Felder haben und diese Felder sind Argumente. Standardmäßig heißt der Abfragetyp Query, der Mutationstyp heißt Mutation und der Subskriptionsstammtyp heißt Subscription. Wenn Sie diesen Standardnamen folgen, kann die schema Spezifikation weggelassen werden.

# Doesn't need further specification, Query is the default name 
type Query { 
    # ... 
} 

Noch können Sie diese Typen benennen, wie Sie wollen. Um zu definieren, welcher Ihrer Objekttypen ein Stammtyp für die Eingabe des Graphen ist, müssen Sie die Schemadefinition verwenden.

# Non standard query type name 
type MyQuery { 
    # ... 
} 

schema { 
    # Needs to be defined in the schema declaration 
    query: MyQuery 
} 

Das gleiche kann für Mutations- und Abonnementtypen getan werden.