Αναγνώστες σαν εσάς βοηθούν στην υποστήριξη του MUO. Όταν κάνετε μια αγορά χρησιμοποιώντας συνδέσμους στον ιστότοπό μας, ενδέχεται να κερδίσουμε μια προμήθεια θυγατρικών.
Το GraphQL είναι μια προδιαγραφή που βασίζεται σε HTTP που λύνει τα περισσότερα από τα προβλήματα που θα αντιμετωπίσετε κατά τη δημιουργία του RESTful API. Είναι κατάλληλο για τη δημιουργία πολύπλοκων API, καθώς μπορείτε να χρησιμοποιήσετε ένα τελικό σημείο για πρόσβαση σε δεδομένα από πολλά σχήματα.
Το GraphQL μετριάζει ζητήματα όπως η υπερβολική και η υπο-ανάκτηση στο REST. Μπορείτε να δημιουργήσετε έναν πελάτη που ζητά συγκεκριμένα πεδία χωρίς να χρειάζεται να κάνετε επιπλέον κλήσεις API.
Υπάρχουν πολλά πακέτα Go που μπορείτε να επωφεληθείτε για τη δημιουργία εφαρμογών που βασίζονται σε GraphQL, από διακομιστές έως API.
1. Το πακέτο gqlgen
gqlgen (Γεννήτρια GraphQL) είναι ένα πλούσιο σε χαρακτηριστικά πακέτο ασφαλές για τη δημιουργία και δημιουργία διακομιστών GraphQL και API.
Το πακέτο gqlgen ακολουθεί μια προσέγγιση πρώτου σχήματος, με την οποία χρησιμοποιείτε το GraphQL SDL για να ορίσετε το σχήμα σας. Στη συνέχεια, δημιουργεί τον κώδικα boilerplate που μπορείτε να προσαρμόσετε για να ρυθμίσετε τον διακομιστή GraphQL και το API σας.
Το gqlgen είναι ένα από τα πληρέστερα πακέτα GraphQL το οικοσύστημα Go. Μπορείτε να δημιουργήσετε τεκμηρίωση και παραδείγματα με το πακέτο και να δημιουργήσετε ερωτήματα, μεταλλάξεις και συνδρομές.
Το gqlgen διασφαλίζει συνδέσεις τύπου, ενσωματώσεις, διεπαφές, δημιουργούμενες εισόδους και αριθμήσεις. Το πακέτο παρέχει επίσης λειτουργικότητα για ανοιχτή ανίχνευση, αγκίστρια για καταγραφή σφαλμάτων, φόρτωση δεδομένων, ταυτόχρονη χρήση και αυξημένη πολυπλοκότητα ερωτημάτων.
Αφού ορίσετε το σχήμα GraphQL - όπως θα κάνατε με οποιαδήποτε βιβλιοθήκη πρώτης σχήματος - θα χρησιμοποιήσετε την εφαρμογή γραμμής εντολών gqlgen για να δημιουργήσετε τον κώδικα boilerplate από το σχήμα στο έργο σας.
Δημιουργώ ένα εργαλεία.go αρχείο στον κατάλογο εργασίας σας και προσθέστε αυτές τις γραμμές κώδικα για να συμπεριλάβετε το gqlgen πακέτο:
// +κατασκευή εργαλείων
πακέτο εργαλεία
εισαγωγή _ "github.com/99designs/gqlgen"
ο εργαλεία.go αρχείο καθορίζει τα εργαλεία κατασκευής για το gqlgen πακέτο.
Εκτελέστε αυτές τις εντολές στον κατάλογο εργασίας σας για να εγκαταστήσετε το πακέτο gqlgen και τις εξαρτήσεις του:
πηγαίνω εγκαταστήστε το github.com/99σχέδια/gqlgen@νεότερο
πηγαίνω mod τακτοποιημένο
Μπορείτε να αρχικοποιήσετε ένα νέο έργο GraphQL όταν εκτελείτε το πακέτο GraphQL με το μέσα σε αυτό εντολή ως όρισμα:
πηγαίνω τρέξτε το github.com/99designs/gqlgen init
Θα χρειαστεί να έχετε το σχήμα σας σε α schema.graphql αρχείο που βρίσκεται στον κατάλογο εργασίας σας για την προετοιμασία ενός έργου.
Εκτελέστε το server.go αρχείο για να ξεκινήσει ο διακομιστής GraphQL μετά την προσθήκη λειτουργιών στην εφαρμογή GraphQL:
πηγαίνω εκτέλεση διακομιστή.πηγαίνω
2. Το πακέτο graphql-go
Το πακέτο graphql-go είναι μια δημοφιλής βιβλιοθήκη GraphQL που στοχεύει να παρέχει την πλήρη Προδιαγραφή σχεδίου GraphQL για τη δημιουργία υπηρεσιών GraphQL στο Go.
Το πακέτο graphql-go ακολουθεί την προσέγγιση τύπων χρόνου εκτέλεσης. έχετε την επιλογή να δηλώσετε το σχήμα σας σε κώδικα Go και το πακέτο ελέγχει το χρόνο εκτέλεσης.
Μπορείτε να εφαρμόσετε ερωτήματα, μεταλλάξεις και συνδρομές και να δημιουργήσετε παραδείγματα με το πακέτο, αλλά δεν υπάρχει καμία λειτουργικότητα για δημιουργημένα enums, εισόδους ή ανοιχτή ανίχνευση.
Το graphql-go διαθέτει ένα ελάχιστο API με υποστήριξη τόσο για ενσωματωμένα πακέτα όσο και για δημοφιλή πακέτα τρίτων. Έχει υποστήριξη για το OpenTelemetry και OpenTracing πρότυπα, έλεγχος τύπων σχήματος έναντι αναλυτών, παράλληλη εκτέλεση επιλυτών και πολλές άλλες δυνατότητες.
Εάν είστε εξοικειωμένοι με κατασκευή RESTful υπηρεσιών στο Go with the http πακέτο, θα βρείτε το πακέτο graphql-go εύκολο στη χρήση.
Εκτελέστε αυτές τις εντολές στον κατάλογο εργασίας σας για να προσθέσετε το πακέτο graphql-go και τις εξαρτήσεις του στο έργο σας:
πηγαίνω λάβετε github.com/graph-gophers/graphql-πηγαίνω
Ακολουθεί ένα παράδειγμα εκκίνησης ενός απλού διακομιστή GraphQL:
πακέτο κύριος
εισαγωγή (
"κούτσουρο"
"net/http"graphql "github.com/graph-gophers/graphql-πηγαίνω"
"github.com/graph-gophers/graphql-πηγαίνω/relay"
)τύπος ερώτηση struct{}
func(_ *ερώτημα)Γειά σου()σειρά { ΕΠΙΣΤΡΟΦΗ "Γειά σου Κόσμε!" }
funcκύριος() {
schemaΠαράδειγμα := `
τύπος Ερώτημα {
γεια: String!
}
`
σχήμα := graphql. MustParseSchema (schemaExample, &query{})
http. Handle("/query", &relay. Handler{Schema: schema})
κούτσουρο. Μοιραία (http. ListenAndServe(":8080", μηδέν))
}
ο Γειά σου μέθοδος του ερώτηση Το struct είναι ένας επιλύτης για το τελικό σημείο GraphQL που επιστρέφει hello world. ο schemaΠαράδειγμα μεταβλητή είναι ο ορισμός του σχήματος και ο διακομιστής θα εκτελείται στη θύρα 8080 με το http του πακέτου ListenAndServe μέθοδος.
3. Το πακέτο Thunder
ο βροντή πλαίσιο ακολουθεί την πρώτη προσέγγιση της δομής. δηλώνετε μια δομή που μοντελοποιεί το σχήμα σας GraphQL. Δημιουργεί το Σχήμα GraphQL από τα δεδομένα Go για τη διαχείριση ομαδικών ερωτημάτων, ζωντανών ερωτημάτων, μεταλλάξεων, συνδρομών και δημιουργίας παραδειγμάτων.
Το Thunder παρέχει ασφάλεια τύπου με συνδέσμους τύπου και άλλα χαρακτηριστικά, συμπεριλαμβανομένης της δημιουργίας σχήματος με βάση την ανάκλαση, ενσωματωμένη παράλληλη εκτέλεση και ομαδοποίηση, ενσωματωμένο πρόγραμμα επεξεργασίας GraphiQL και διαχωριστικά σχήματα για μεγαλύτερο GraphQL διακομιστές.
Δεν υπάρχει λειτουργικότητα για ενσωμάτωση, διεπαφές, αριθμοί ή είσοδοι που δημιουργούνται, συνένωση, ανοιχτή ανίχνευση ή προσαρμοσμένα σφάλματα στο πακέτο Thunder. Ωστόσο, είναι ένα από τα πιο εύκολα στη χρήση σε σύγκριση με άλλα δημοφιλή πακέτα και είναι ένα εξαιρετικό πακέτο εκκίνησης εάν δεν έχετε εμπειρία στο GraphQL.
Θα χρειαστεί να εκτελέσετε αυτήν την εντολή στο τερματικό του καταλόγου εργασίας σας για να εγκαταστήσετε το πακέτο Thunder και τις εξαρτήσεις του:
πηγαίνω λάβετε το github.com/samsarahq/thunder/graphql
Θα χρειαστεί να δηλώσετε ένα μοντέλο δομής για το σχήμα, να γράψετε τους επιλύτες και να δημιουργήσετε τον διακομιστή για να ξεκινήσει έναν απλό διακομιστή GraphQL με το πακέτο Thunder.
εισαγωγή (
"συμφραζόμενα"
"net/http"
"χρόνος""github.com/samsarahq/thunder/graphql"
"github.com/samsarahq/thunder/graphql/graphiql"
"github.com/samsarahq/thunder/graphql/introspection"
"github.com/samsarahq/thunder/graphql/schemabuilder"
"github.com/samsarahq/thunder/reactive"
)τύπος Θέση struct {
Τίτλος σειρά
Σώμα σειρά
Δημιουργήθηκε την ώρα. χρόνος
}// ο διακομιστής είναι ο διακομιστής graphql μας.
τύπος υπηρέτης struct {
δημοσιεύσεις []ανάρτηση
}// registerQuery καταχωρεί τον τύπο ερωτήματος ρίζας.
func(s *διακομιστής)registerQuery(σχήμα *schemabuilder. Σχήμα) {
obj := σχήμα. Ερώτηση()αντικ. FieldFunc("posts", func() []Θέση {
ΕΠΙΣΤΡΟΦΗ σ.αναρτήσεις
})
}// registerMutation καταχωρεί τον τύπο μετάλλαξης ρίζας.
func(s *διακομιστής)registerΜετάλλαξη(σχήμα *schemabuilder. Σχήμα) {
obj := σχήμα. Μετάλλαξη()αντικ. FieldFunc("echo", func(αρσ struct{ Μήνυμα σειρά })σειρά {
ΕΠΙΣΤΡΟΦΗ args. Μήνυμα
})
}// registerPost καταχωρεί τον τύπο ανάρτησης.
func(s *διακομιστής)registerPost(σχήμα *schemabuilder. Σχήμα) {
obj := σχήμα. Αντικείμενο ("Ανάρτηση", ανάρτηση{})αντικ. FieldFunc("ηλικία", func(ctx πλαίσιο. Περιεχόμενο, σ *ανάρτηση)σειρά {
αντιδραστικός. InvalidateAfter (ctx, 5*χρόνος. Δεύτερος)
ΕΠΙΣΤΡΟΦΗ χρόνος. Αφού (σελ. CreatedAt).String()
})
}// schema δημιουργεί το σχήμα graphql.
func(s *διακομιστής)σχήμα() *graphql.Σχήμα {
builder := schemabuilder. NewSchema()
s.registerQuery (δημιουργός)
s.registerMutation (δημιουργός)
s.registerPost (δημιουργός)
ΕΠΙΣΤΡΟΦΗ οικοδόμος. MustBuild()
}funcκύριος() {
// Δημιουργήστε ένα διακομιστή, δημιουργήστε έναν διακομιστή και εξυπηρετήστε το σχήμα στη θύρα 3030.
διακομιστής := &διακομιστής{
αναρτήσεις: []ανάρτηση{
{Title: "first post!", Body: "I was here first!", CreatedAt: time. Τώρα()},
{Title: "graphql", Body: "d you know about Thunder?", CreatedAt: time. Τώρα()},
},
}schema := server.schema()
ενδοσκόπηση. AddIntrospectionToSchema (σχήμα)
// Εκθέστε το σχήμα και το graphiql.
http. Handle("/graphql", graphql. Χειριστής (σχήμα))
http. Handle("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Handler()))
http. ListenAndServe(":3030", μηδέν)
}
ο Θέση struct είναι το μοντέλο για το σχήμα GraphQL, και το υπηρέτης struct είναι το παράδειγμα διακομιστή. ο registerQuery, registerΜετάλλαξη, και registerPost Οι μέθοδοι είναι συναρτήσεις επίλυσης για ερωτήματα, μεταλλάξεις και αποθήκευση δεδομένων.
ο κύριος η λειτουργία ξεκινά με τον διακομιστή GraphQL στη θύρα 3030 και τον επεξεργαστή GraphQL.
Μπορείτε να ρωτήσετε τα GraphQL API in Go με ενσωματωμένα πακέτα
Το GraphQL βασίζεται σε HTTP και μπορείτε να καταναλώνετε GraphQL API με το ενσωματωμένο http πακέτο και άλλα πακέτα παρόμοια με τα RESTful API. Υπάρχουν επίσης πακέτα στο οικοσύστημα της Go που θα σας επιτρέψουν να καταναλώνετε γρήγορα τα GraphQL API.