Wie binden GraphQL Argumente in Felder?

stimmen
0

Ich habe beide lesen Sie die wichtigsten „Lernen“ Leitfaden über graphql.com und die howtographql.com Tutorial.

Ich bin immer noch mit ein paar Begriffe zu kämpfen, einer von ihnen Argumente beziehen.

Grundsätzlich verstehe ich nicht, wie GraphQL weiß, was Feld eines Objekttypen, ein übergebene Argument in einem Abfrage-Typ gehört.

Beispiel:

type Person {
  id: ID!
  name: String!
  age: Int
  country: String!
}

type Query PersonsByAge {
  person(selectedCountry: String!): [Person]
}

query PersonsByAge {
  person(selectedCountry: 'Sweden')
}

Fragen

  1. Wie genau wissen GraphQL , dass das selectedCountryArgument auf dem Filter sollte countryFeld?
  2. Gibt es mehrere Instanzen der Person Objekttyp, wie in normalen OOP, starken Text , und diese können in einem zurückgeführt werden , Listwie oben gemacht?
  3. Ich bin nicht ganz sicher, meine Syntax / code oben richtig ist, gibt es keine offensichtlichen Fehler?

Ich fühle mich wie ich etwas wirklich grundlegende bin hier fehlt, fand ich nur, dass die Führungen Tiefe und Struktur fehlte.

Vielen Dank.


BEARBEITEN:

Feste Klammer Tippfehler, wies in Daniels Antwort aus. Haben Sie nicht andere Syntax Probleme beheben, die Antwort auf die Frage zu halten übereinstimmen.

Veröffentlicht am 07/11/2018 um 23:55
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
4

  1. Ein Argument oder Argumente für ein bestimmtes Feld Zugabe nicht den Wert beeinflussen das Feld auf in sich selbst auflöst. In GraphQL.js hat jedes Gebiet eine zugeordnete resolveFunktion (oder „Resolver“). Es liegt an den Server, um diese Funktion zu implementieren. Die Funktion empfängt vier Parameter, einschließlich des Wertes des übergeordneten Feldes, die Argumente für das Feld und den Ausführungskontext nicht gelöst. Der Resolver kann alle oder keine dieser Parameter verwenden , um den Wert zu bestimmen , die für ein Feld aufgelöst werden sollen.

  2. Ja, umfasst GraphQL einen speziellen Kollektionstyp genannt , Listdass „die Art der einzelnen Elemente in der Liste erklärt“. Diese können Eingabe- oder Ausgabetypen oder Skalare sein. In GraphQL.js ist eine Liste effektiv nur ein Array. Es ist wichtig zu beachten , dass , wenn ein Typ Feld eine Liste, es ist Resolver muss ein Array zurück, und ebenso , wenn ein Feld des Typs ein Ausgabetyp ist, kann der Resolver nicht ein Array zurück. GraphQL wird kein coerce Listin einen nicht - ListWert und umgekehrt.

  3. Es gibt ein paar Dinge falsch mit Ihrer Syntax. Ihre Anfrage hat eine extra Klammer und keine subselection für das personFeld (dh nicht angeben , die Felder , die Sie für dieses Feld zurückgegeben werden sollen, die erforderlich ist , da der Typ für das Feld ein Ausgabetyp ist, nicht ein Skalar). Zusätzlich Definition in Ihrem Schema, haben Sie ein Fremd bekam PersonsByAgeEtikett auf Query Art , die ungültige Syntax ist und nicht wirklich notwendig.

Hier ist dein Beispiel mit dem richtigen Syntax überarbeitet und ein Resolver den früheren Punkt zu demonstrieren. Dieses Beispiel setzt voraus , Sie erstellen das Schema mit graphql-tools.

const people = [
  { id: 1, name: 'Oscar', country: 'Sweden' },
  { id: 2, name: 'Sal', country: 'Italy' }
]
const typeDefs = `
  type Person {
    id: ID!
    name: String!
    country: String!
  }
  type Query {
    person(id: ID!): Person
    people(selectedCountry: String!): [Person]
  }
`
const resolvers = {
  Query: {
    person: (root, args, context) => {
      // this returns a single object
      return people.find(person => person.id === args.id)
    },
    people: (root, args, context) => {
      // this returns an array
      return people.filter(person => person.country === args.selectedCountry)
    },
  },
}

Anschließend können Sie Ihr Schema Client-Seite wie folgt abfragen:

query SomeQueryName {
  people(selectedCountry: "Sweden") {
    id
    name
  }
}

Ich empfehle Check - out sehr Apollo Launchpad , die es Ihnen erlaubt, ein Schema zu erstellen und es auf die Schnelle Abfrage , so dass Sie frei mit der Syntax und lernen , indem Sie experimentieren können.

Beantwortet am 08/11/2018 um 01:13
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more