Πώς GraphQL επιχειρήματα δέσει σε πεδία;

ψήφοι
0

Έχω διαβάσει τόσο το κύριο οδηγό «Μάθετε» για graphql.com και το howtographql.com φροντιστήριο.

Είμαι ακόμα παλεύουν με μερικές έννοιες, ένας από αυτούς είναι σχετικά με επιχειρήματα.

Βασικά, δεν καταλαβαίνω πώς GraphQL ξέρει τι πεδίο ενός τύπου αντικειμένου, το πέρασε επιχείρημα σε ένα τύπο ερωτήματος ανήκει.

Παράδειγμα:

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

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

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

ερωτήσεις

  1. Πώς ακριβώς κάνει GraphQL γνωρίζουμε ότι το selectedCountryεπιχείρημα αυτό πρέπει να φιλτράρετε το countryπεδίο;
  2. Οι πολλαπλές παρουσίες του τύπου αντικειμένου πρόσωπο, όπως και στην κανονική OOP, υπάρχει ισχυρή κείμενο και αυτά μπορούν να επιστραφούν σε μια Listόσο γίνεται παραπάνω;
  3. Δεν είμαι απολύτως βέβαιος παραπάνω σύνταξη / κωδικός μου είναι σωστή, υπάρχουν προφανή λάθη εκεί;

Νιώθω σαν να είμαι λείπει κάτι πολύ βασικό εδώ, θα ήθελα απλώς διαπίστωσε ότι οι οδηγοί δεν είχε το βάθος και τη δομή.

Ευχαριστώ.


ΕΠΕΞΕΡΓΑΣΙΑ:

Σταθερή παρένθεση τυπογραφικό λάθος, τόνισε στην απάντησή του Δανιήλ. Δεν διορθώσετε άλλα θέματα σύνταξη, για να κρατήσει την απάντηση που ταιριάζουν στο ερώτημα.

Δημοσιεύθηκε 07/11/2018 στις 23:55
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
4

  1. Προσθέτοντας ένα επιχείρημα ή επιχειρήματα για ένα συγκεκριμένο τομέα δεν επηρεάζει την τιμή του πεδίου επιλύει το ίδιο. Σε GraphQL.js, κάθε πεδίο έχει ένα συσχετιζόμενο resolveλειτουργία (ή «resolver»). Είναι στο χέρι του διακομιστή για την εφαρμογή αυτής της λειτουργίας. Η λειτουργία δέχεται τέσσερις παραμέτρους, συμπεριλαμβανομένης της αξίας της μητρικής τομέα, τα επιχειρήματα για το πεδίο να επιλυθεί και το πλαίσιο εκτέλεσης. Ο αναλυτής μπορεί να χρησιμοποιήσει όλες ή καμία από αυτές τις παραμέτρους για να καθορίσει την τιμή που πρέπει να επιλυθούν για ένα πεδίο.

  2. Ναι, GraphQL περιλαμβάνει έναν ειδικό τύπο συλλογή ονομάζεται Listη «δηλώνει τον τύπο της κάθε στοιχείο της λίστας». Αυτά μπορεί να είναι τα είδη εισόδου ή εξόδου ή αυξανόμενα επίπεδα. Σε GraphQL.js, η λίστα είναι αποτελεσματικά μόνο ένας πίνακας. Είναι σημαντικό να σημειωθεί ότι αν ο τύπος ενός πεδίου είναι ένας κατάλογος, είναι αναλυτής πρέπει να επιστρέψει έναν πίνακα, και, επίσης, αν το είδος ενός πεδίου είναι ένα είδος εξόδου, η επίλυση δεν μπορεί να επιστρέψει έναν πίνακα. GraphQL δεν θα εξαναγκάσει ένα Listσε μια μη Listαξίας και αντίστροφα.

  3. Υπάρχουν μερικά πράγματα λάθος με τη σύνταξη σας. Το ερώτημά σας έχει ένα επιπλέον παρένθεση και δεν subselection για τον personτομέα (δηλαδή, δεν μπορείτε να καθορίσετε τα πεδία που θέλετε επέστρεψε για αυτό το πεδίο, η οποία είναι απαραίτητη δεδομένου ότι ο τύπος του πεδίου είναι ένα είδος εξόδου, δεν είναι ένα βαθμωτό). Επιπλέον, στον ορισμό σχήμα σας, έχετε ένα ξένο PersonsByAgeετικέτα με τον τύπο του ερωτήματος σας, η οποία είναι έγκυρη σύνταξη και δεν είναι πραγματικά απαραίτητο.

Εδώ είναι το παράδειγμά σας, επαναδιατυπώθηκε με σωστή σύνταξη και αναλυτή για να αποδείξει την προηγούμενη σημείο. Αυτό το παράδειγμα προϋποθέτει τη δημιουργία του σχήματος σας χρησιμοποιώντας 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)
    },
  },
}

Στη συνέχεια μπορείτε να υποβάλετε ερώτημα σχήμα πλευρά του πελάτη σας όπως αυτό:

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

Συστήνω ιδιαίτερα το check out Απόλλωνα Launchpad , το οποίο θα σας επιτρέψει να δημιουργήσετε ένα σχήμα και το ερώτημα είναι on the fly, ώστε να μπορείτε να πειραματιστείτε ελεύθερα με τη σύνταξη και να μάθουν μέσα από την πράξη.

Απαντήθηκε 08/11/2018 στις 01:13
πηγή χρήστη

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