Το Graph Query Language (GraphQL) είναι μια γλώσσα και μια προδιαγραφή για την αλληλεπίδραση με τα GraphQL API, μια αρχιτεκτονική πελάτη-διακομιστή που βασίζεται σε HTTP για επικοινωνία σε όλο τον ιστό.
Το Facebook κυκλοφόρησε το GraphQL ως εναλλακτική λύση στο αρχιτεκτονικό πρότυπο REST. Το GraphQL αντιμετωπίζει τα περισσότερα από τα ζητήματα με το REST με τρόπο χωρίς κράτος και με δυνατότητα αποθήκευσης στην προσωρινή μνήμη. Παρέχει μια απλή και διαισθητική σύνταξη που περιγράφει την αναμενόμενη έξοδο (ες) ή είσοδο (ες) και το API αναμεταδίδει τα δεδομένα που ταιριάζουν με το αίτημα.
Δεδομένου ότι η GraphQL είναι μια προδιαγραφή, μπορείτε να δημιουργήσετε και να καταναλώσετε GraphQL API σε οποιαδήποτε γλώσσα προγραμματισμού από την πλευρά του διακομιστή, συμπεριλαμβανομένης της Go.
Ξεκινώντας με τα GraphQL API in Go
Το GraphQL βασίζεται στην αρχιτεκτονική HTTP, και το Go παρέχει λειτουργικότητα HTTP στο ενσωματωμένο του http πακέτο.
Μπορείτε να χρησιμοποιήσετε το http πακέτο προς καταναλώστε RESTful API στο Go
, μεταξύ άλλων χαρακτηριστικών. Για το GraphQL, μπορείτε να κάνετε ερωτήματα και μεταλλάξεις σε διακομιστές GraphQL API με http πακέτο και άλλα ενσωματωμένα πακέτα.Πακέτα πελατών GraphQL όπως Machinebox's ή shurCooL’s κάνουν ακόμα πιο εύκολη τη διαδικασία αλληλεπίδρασης με τα GraphQL API.
Μπορείτε να χρησιμοποιήσετε το http πακέτο χωρίς εξαρτήσεις για αλληλεπίδραση με ένα GraphQL API. Εισαγάγετε αυτά τα πακέτα στο αρχείο Go σας για να ξεκινήσετε:
εισαγωγή (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"χρόνος"
)
Θα χρησιμοποιήσετε το byte πακέτο για τη δημιουργία ενός νέου buffer για το αίτημα και το json πακέτο για την ομαδοποίηση ενός χάρτη στο σώμα αιτήματος JSON. Μπορείς να χρησιμοποιήσεις ioutil για να διαβάσετε το σώμα απάντησης, και το χρόνος πακέτο για να ορίσετε ένα χρονικό όριο για το αίτημα.
Ερώτημα GraphQL API με Go
Υπάρχουν πολλά δωρεάν δημόσια GraphQL API που μπορείτε να κάνετε ερωτήσεις και να τα ενσωματώσετε στις εφαρμογές σας. Για αυτό το άρθρο, θα ρωτήσετε το Apollo GraphQL's Countries API για να ρωτήσετε δεδομένα σε χώρες σε όλο τον κόσμο.
Όλες οι λειτουργίες GraphQL είναι τυπικά αιτήματα POST αφού πρέπει να έχουν ένα ωφέλιμο φορτίο (σώμα αιτήματος). Τα περισσότερα GraphQL API δέχονται το σώμα αιτήματος JSON ως τύπο περιεχομένου και Το Go παρέχει λειτουργικότητα για τη χρήση χαρτών και δομών για εργασία με JSON.
Θα χρειαστεί να μελετήσετε τη δομή του σχήματος GraphQL για να υποβάλετε ερώτημα στο API. Το ερώτημα θα είναι το ίδιο με ένα κανονικό ερώτημα GraphQL με τη διαφορά ότι η λειτουργία (ερώτημα ή μετάλλαξη) είναι το κλειδί και τα δεδομένα είναι η τιμή του χάρτη.
Δείτε πώς μπορείτε να δηλώσετε μια παρουσία χάρτη JSON που θα εντάξετε σε JSON για το αίτημα.
jsonMapInstance := χάρτης[σειρά]σειρά {
"ερώτηση": `
{
χώρες {
όνομα,
τηλέφωνο,
νόμισμα,
κώδικας,
emoji
}
}
`,
}
ο jsonMapInstance μεταβλητή είναι η παρουσία χάρτη για το σώμα της αίτησης. Η τιμή είναι μια συμβολοσειρά των δεδομένων ερωτήματος που περιμένετε από το API. Σε αυτήν την περίπτωση, τα δεδομένα ερωτήματος που θα περιμένετε από τα API χώρες σχήμα είναι το όνομα, τηλέφωνο, νόμισμα, κώδικας, και emoji χωράφια.
Μπορείτε να χρησιμοποιήσετε το Διευθετώ μέθοδος του json πακέτο για την κωδικοποίηση της παρουσίας χάρτη σε JSON. ο Διευθετώ μέθοδος επιστρέφει το κωδικοποιημένο JSON και ένα σφάλμα για περιπτώσεις με πρόβλημα κωδικοποίησης.
jsonResult, err := json. Marshal (jsonMapInstance)
αν λάθος!= μηδέν {
fmt. Printf("Παρουσιάστηκε σφάλμα κατά την ομαδοποίηση της παρουσίας JSON %v", err)
}
Αφού κωδικοποιήσετε τον χάρτη σε JSON, μπορείτε να στείλετε το αίτημα POST στο API. Μπορείτε να δημιουργήσετε μια νέα παρουσία αιτήματος με το NewRequest μέθοδο, η οποία λαμβάνει τον τύπο αιτήματος, τη διεύθυνση URL και την προσωρινή μνήμη JSON.
ο NewRequest μέθοδος επιστρέφει μια παρουσία αιτήματος. Θα πρέπει να ορίσετε τον τύπο περιεχομένου ανάλογα με τις προδιαγραφές του API. Μπορείτε να ορίσετε τον τύπο περιεχομένου για αιτήματα HTTP με το Σειρά μέθοδος του Επί κεφαλής μέθοδος της περίπτωσης αιτήματός σας.
newRequest, err := http. NewRequest("POST", "https://countries.trevorblades.com/graphql", byte. NewBuffer (jsonResult))
νέοΑίτημα. Επί κεφαλής. Set ("Content-Type", "application/json")
Μπορείτε να δημιουργήσετε ένα απλό πρόγραμμα-πελάτη HTTP για το αίτημά σας με το Πελάτης μέθοδο του πακέτου HTTP. ο Πελάτης Η μέθοδος σάς επιτρέπει επίσης να ορίσετε ένα χρονικό όριο για το αίτημά σας με το χρόνος πακέτο.
πελάτης := &http. Client{Timeout: time. δεύτερο * 5}
απάντηση, err := πελάτης. Κάντε (νέο αίτημα)
αν λάθος!= μηδέν {
fmt. Printf("Παρουσιάστηκε σφάλμα κατά την εκτέλεση του αιτήματος%v", err)
}
Αφού δηλώσετε τον πελάτη HTTP, εκτελέστε το αίτημα API σας με το Κάνω μέθοδος. ο Κάνω μέθοδος αποδέχεται την παρουσία του αιτήματος και επιστρέφει την απάντηση και ένα σφάλμα.
Μπορείτε να διαβάσετε την απάντηση του αιτήματος API με το ioutil του πακέτου Διαβάστε τα όλα μέθοδος. Λαμβάνει μια ροή εξόδου και επιστρέφει ένα κομμάτι byte των δεδομένων με ένα σφάλμα που μπορείτε να χειριστείτε.
answerData, err := ioutil. ReadAll (απάντηση. Σώμα)
αν λάθος!= μηδέν {
fmt. Printf("Σφάλμα ανάγνωσης δεδομένων%v", err)
}
Με την ενσωματωμένη συνάρτηση συμβολοσειράς, μπορείτε να μετατρέψετε την απόκριση κομματιού byte στον τύπο συμβολοσειράς.
fmt. Println(σειρά(responseData))
Ακολουθεί μια απάντηση που δείχνει το αποτέλεσμα του αιτήματος API:
Η κατανάλωση RESTful API είναι σαν να καταναλώνετε GraphQL API
Δεδομένου ότι τόσο τα API REST όσο και τα GraphQL χρησιμοποιούν το πρωτόκολλο HTTP, η κατανάλωση καθενός είναι μια πολύ παρόμοια διαδικασία και μπορείτε να χρησιμοποιήσετε το http πακέτο και για τις δύο περιπτώσεις.
Θα χρειαστεί να δημιουργήσετε πελάτες, να ζητήσετε παρουσίες και να διαβάσετε τα δεδομένα με τα ίδια πακέτα.