Το GraphQL προσφέρει μια ευέλικτη εναλλακτική στην κλασική προσέγγιση REST όταν δημιουργείτε ένα API.

Ένας από τους πιο κρίσιμους παράγοντες που πρέπει να λάβετε υπόψη κατά το σχεδιασμό μιας εφαρμογής είναι ο τύπος της αρχιτεκτονικής API που θα χρησιμοποιηθεί. Ο αποτελεσματικός σχεδιασμός API είναι ζωτικής σημασίας για τη διασφάλιση της απόδοσης των εφαρμογών σε όλο τον κύκλο ζωής τους.

Η αρχιτεκτονική RESTful είναι η πιο δημοφιλής προσέγγιση, αλλά έχει ένα σημαντικό μειονέκτημα: μια σταθερή δομή τελικού σημείου που επιστρέφει προκαθορισμένα δεδομένα. Αυτός ο σχεδιασμός μπορεί να οδηγήσει σε αναποτελεσματική επικοινωνία.

Αντίθετα, το GraphQL —μια εναλλακτική του REST— προσφέρει μεγαλύτερη ευελιξία επιτρέποντάς σας να ζητάτε μόνο τα δεδομένα που χρειάζεστε.

Τι είναι τα GraphQL API;

GraphQL είναι μια γλώσσα ερωτημάτων που μπορείτε να χρησιμοποιήσετε για να γράψετε backend API (Application Programming Interfaces). Διαφορετικός REST API, τα οποία έχουν πολλαπλά τελικά σημεία για διαφορετικά δεδομένα, τα GraphQL API έχουν μόνο ένα σημείο εισόδου.

instagram viewer

Οι πελάτες μπορούν να καθορίσουν τα δεδομένα που χρειάζονται στα ερωτήματά τους από αυτό το μοναδικό σημείο εισόδου, καθιστώντας το πιο ευέλικτο και αποτελεσματικό για την ανάκτηση μόνο των απαραίτητων δεδομένων.

Με απλά λόγια, ένα GraphQL API υλοποιεί την αρχιτεκτονική GraphQL που περιγράφεται από το Προδιαγραφές GraphQL. Αυτός ο σχεδιασμός περιλαμβάνει τον καθορισμό του σχήματος, των ερωτημάτων και των μεταλλάξεων με τις οποίες μπορούν να αλληλεπιδράσουν οι πελάτες.

Ακολουθεί μια απλοποιημένη ανάλυση των βασικών στοιχείων της αρχιτεκτονικής GraphQL API:

  1. Σχήμα: Ένα σχήμα είναι μια περιγραφή των τύπων δεδομένων και λειτουργιών που παρέχει το API. Βασικά, ένα σχήμα ορίζει τη δομή των διαθέσιμων δεδομένων και τον τύπο των ερωτημάτων και των μεταλλάξεων που μπορεί να εκτελέσει ένας πελάτης για να τροποποιήσει τα δεδομένα.
  2. Ερωτήματα: Οι πελάτες χρησιμοποιούν ερωτήματα για να ανακτήσουν δεδομένα από τη βάση δεδομένων, προσδιορίζοντας τη δομή των δεδομένων που απαιτούν. Επιπλέον, μπορούν να ενσωματώσουν πολλαπλά ερωτήματα σε ένα μόνο αίτημα HTTP για να ανακτήσουν σχετικά δεδομένα από πολλά τελικά σημεία.
  3. Μεταλλάξεις: Οι μεταλλάξεις είναι λειτουργίες που χρησιμοποιούνται για την τροποποίηση δεδομένων στη βάση δεδομένων. Οι πελάτες μπορούν να στείλουν αιτήματα μετάλλαξης για να δημιουργήσουν, να ενημερώσουν ή να διαγράψουν δεδομένα.

Ρυθμίστε μια βάση δεδομένων MongoDB

Για να ξεκινήσετε, δημιουργήστε μια βάση δεδομένων MongoDB. Εναλλακτικά, μπορείτε δημιουργήστε ένα σύμπλεγμα MongoDB στο cloud δωρεάν.Μόλις ρυθμίσετε τη βάση δεδομένων σας, αντιγράψτε τη συμβολοσειρά URI σύνδεσης βάσης δεδομένων MongoDB.

Μπορείτε να βρείτε τον κωδικό αυτού του έργου σε αυτό Αποθετήριο GitHub.

Δημιουργήστε έναν διακομιστή Apollo

Διακομιστής Apollo είναι μια δημοφιλής υλοποίηση διακομιστή GraphQL που θα σας επιτρέψει να δημιουργήσετε GraphQL API σε περιβάλλοντα JavaScript, συμπεριλαμβανομένων των Node.js, Express και άλλων.

Δημιουργήστε έναν κατάλογο για ένα νέο έργο και CD μέσα σε αυτό:

mkdir graphql-API-mongoDB
cd graphql-API-mongoDB

Στη συνέχεια, αρχικοποιήστε ένα νέο έργο Node.js.

npm init --ναι

Αυτή η εντολή δημιουργεί ένα πακέτο.json αρχείο.

Εγκαταστήστε τις Απαιτούμενες Εξαρτήσεις

Εκτελέστε την ακόλουθη εντολή για να εγκαταστήσετε τα πακέτα.

npm εγκατάσταση του apollo-server graphql mongoose

Τέλος, δημιουργήστε ένα index.js αρχείο στον ριζικό κατάλογο του έργου σας.

Ρύθμιση του διακομιστή Apollo

Ανοιξε index.js και προσθέστε τον παρακάτω κώδικα:

συνθ { ApolloServer } = απαιτώ('apollo-server');
συνθ μαγκούστα = απαιτώ('μαγκούστα');
συνθ typeDefs = απαιτώ("./graphql/typeDefs");
συνθ επιλύτες = απαιτώ("./graphql/resolvers");

συνθ διακομιστής = νέος ApolloServer({
typeDefs,
επιλύτες
});

συνθ MONGO_URI = 'mongodb://localhost: 27017';

μαγκούστα
.connect (MONGO_URI, {
useNewUrlParser: αληθής,
useUnifiedTopology: αληθής,
})
.έπειτα(() => {
κονσόλα.κούτσουρο(`Db Connected`);
ΕΠΙΣΤΡΟΦΗ server.listen({ Λιμάνι: 5000 });
})
.έπειτα((res) => {
κονσόλα.κούτσουρο(`Ο διακομιστής λειτουργεί σε ${res.url}`);
})
.σύλληψη(πλανώμαι => {
κονσόλα.log (err.message);
});

Αυτός ο κώδικας προετοιμάζει έναν τοπικό διακομιστή GraphQL χρησιμοποιώντας τη βιβλιοθήκη Apollo Server. Στη συνέχεια, δημιουργεί μια σύνδεση με μια βάση δεδομένων MongoDB με το δεδομένο URI σύνδεσης.

Παρατηρήστε πώς ο κώδικας μεταβιβάζει δύο ορίσματα στη νέα παρουσία του ApolloServer: typeDefs και επιλύτες. Αυτά καθορίζουν τους τύπους δεδομένων και τις λειτουργίες που μπορεί να εκτελέσει το GraphQL API.

Αφού ρυθμιστεί η σύνδεση με τη βάση δεδομένων MongoDB, ο διακομιστής αρχίζει να ακούει στη θύρα 5000.

Ορίστε το μοντέλο δεδομένων

Δημιουργήστε έναν νέο φάκελο στον ριζικό κατάλογο του φακέλου του έργου σας και ονομάστε τον μοντέλα. Σε αυτόν τον φάκελο, δημιουργήστε νέα ονόματα αρχείων dataModel.js και προσθέστε τον ακόλουθο κώδικα σε αυτό:

συνθ {model, Schema} = απαιτώ('μαγκούστα');

συνθ υπάλληλοςΣχήμα = νέος Σχήμα({
όνομα: Σειρά,
τμήμα: Σειρά,
Μισθός: Σειρά,
});

μονάδα μέτρησης.εξαγωγές = μοντέλο('Υπάλληλος', staffSchema);

Ορίστε το σχήμα GraphQL

Ένα σχήμα GraphQL ορίζει τη δομή των δεδομένων που μπορείτε να υποβάλετε ερωτήματα χρησιμοποιώντας το GraphQL API. Το σχήμα περιγράφει επίσης τα ερωτήματα και τις μεταλλάξεις που μπορεί να εκτελέσει το API. Μπορείτε να χρησιμοποιήσετε ερωτήματα για να λάβετε δεδομένα και μεταλλάξεις για να τα τροποποιήσετε.

Στον ριζικό κατάλογο του έργου σας, δημιουργήστε έναν νέο φάκελο και ονομάστε τον graphql. Μέσα σε αυτόν τον φάκελο, προσθέστε δύο αρχεία: typeDefs.js και επιλύτες.js

Προσθέστε τον παρακάτω κώδικα στο αρχείο typeDefs.js:

συνθ {gql} = απαιτώ("Apollo-server");

συνθ typeDefs = gql`
τύπος Υπάλληλος {
id: ID!
όνομα: Σειρά
τμήμα: Σειρά
Μισθός: Σειρά
}
input EmployeeInput {
όνομα: Σειρά
τμήμα: Σειρά
Μισθός: Σειρά
}
πληκτρολογήστε ερώτημα {
getEmployee (id: ID): Employee #ΕΠΙΣΤΡΟΦΗ Υπάλληλος με ταυτότητα
εργαζόμενοι: [Εργαζόμενος] #ΕΠΙΣΤΡΟΦΗ πίνακας του Υπαλλήλους
}
τύπος μετάλλαξη {
createEmployee (employeeInput: EmployeeInput): Υπάλληλος
updateEmployee (αναγνωριστικό: ID, εργαζόμενοςΕίσοδος: EmployeeInput): Boolean
deleteEmployee (αναγνωριστικό: ID): Boolean
}
`;

μονάδα μέτρησης.exports = typeDefs;

Αυτός ο παραπάνω κώδικας χρησιμοποιεί το gql συνάρτηση που παρέχεται από το πακέτο apollo-server για τη δημιουργία ενός σχήματος GraphQL για τα δεδομένα των Υπαλλήλων.

Το σχήμα αποτελείται από τέσσερα κύρια στοιχεία: τύπους δεδομένων για πληροφορίες υπαλλήλων, τύπους εισόδου, ερωτήματα και μεταλλάξεις που μπορεί να εκτελέσει το API.

Ορίστε τους επιλύτες για το GraphQL API

Ο αναλυτής είναι μια συνάρτηση GraphQL που ορίζει τα δεδομένα που πρέπει να διαβιβάζονται όταν ένας πελάτης στέλνει ένα ερώτημα API για ανάκτηση δεδομένων. Ουσιαστικά, ο πρωταρχικός του ρόλος είναι να ανακτήσει τα απαιτούμενα δεδομένα από την καθορισμένη προέλευση δεδομένων και να τα επιστρέψει στον πελάτη.

Προσθέστε τον παρακάτω κώδικα στο επιλύτες.js αρχείο στο graphql ντοσιέ. Οι επιλύτες, σε αυτήν την περίπτωση, καθορίζονται μέσα στα αντικείμενα Query και Mutation.

Το αντικείμενο Query ορίζει δύο μεθόδους: υπαλλήλους και getEmployee. Αυτές οι μέθοδοι είναι υπεύθυνες για τη λήψη δεδομένων εργαζομένων από τη βάση δεδομένων κατόπιν αιτήματος ενός πελάτη.

συνθ Υπάλληλος= απαιτώ("../models/employeesModel");

// GraphQL Resolvers
συνθ επιλύτες = {
Ερώτημα: {
υπαλλήλους: ασυγχρονισμός () => {
δοκιμάστε {
συνθ υπάλληλοι = αναμένω Employee.find({});
ΕΠΙΣΤΡΟΦΗ υπαλλήλους;
} σύλληψη (λάθος) {
κονσόλα.λάθος (σφάλμα);
βολήνέοςΛάθος("Απέτυχε η ανάκτηση εργαζομένων");
}
},
getEmployee: ασυγχρονισμός (γονέας, args) => {
δοκιμάστε {
συνθ υπάλληλος = αναμένω Employee.findById (args.id);
ΕΠΙΣΤΡΟΦΗ υπάλληλος;
} σύλληψη (λάθος) {
κονσόλα.λάθος (σφάλμα);
βολήνέοςΛάθος("Απέτυχε η ανάκτηση του υπαλλήλου με ταυτότητα");
}
},
},

Το αντικείμενο Mutation έχει τρεις μεθόδους: δημιουργία Υπάλληλος, ενημέρωσηΕργαζόμενος, και διαγραφή Υπάλληλου. Αυτές οι μέθοδοι κάνουν αλλαγές στα δεδομένα που είναι αποθηκευμένα στη βάση δεδομένων MongoDB.

 Μετάλλαξη: {
ασυγχρονισμός createEmployee (_, { εργαζόμενοςΕίσοδος: { όνομα, τμήμα, μισθός } }) {
συνθ νέος Υπάλληλος = νέος Υπάλληλος({
όνομα: όνομα,
τμήμα: τμήμα,
μισθός: μισθός
});

συνθ ανταπόκριση = αναμένω newEmployee.save();
κονσόλα.log (newEmployee);

ΕΠΙΣΤΡΟΦΗ {
id: answer._id,
...απάντηση._έγγρ
}
},

ασυγχρονισμός updateEmployee (_, {id, εργαζόμενοςΕίσοδος: {όνομα, τμήμα, μισθός}}) {
συνθ updatedEmployee = αναμένω Employee.updateOne(
{ _ταυτότητα: id },
{ όνομα, τμήμα, μισθός }
);

αν (!updatedEmployee) {
βολήνέοςΛάθος(`Υπάλληλος με ταυτότητα: ${id} δεν βρέθηκε`);
}

ΕΠΙΣΤΡΟΦΗαληθής; // Επιστρέψτε μια δυαδική τιμή που υποδεικνύει την επιτυχία της ενημέρωσης
},

ασυγχρονισμός deleteEmployee (_, {id}) {
συνθ διαγραμμένοςΕργαζόμενος = αναμένω Employee.deleteOne({ _ταυτότητα: id });

αν (!deletedEmployee || deletedEmployee.deletedCount 0) {
βολήνέοςΛάθος(`Υπάλληλος με ταυτότητα ${id} δεν βρέθηκε`);
}

ΕΠΙΣΤΡΟΦΗαληθής; // Επιστρέψτε μια δυαδική τιμή που υποδεικνύει την επιτυχία της διαγραφής
},
 },
};

μονάδα μέτρησης.εξαγωγές = επιλύτες;

Τέλος, εκτελέστε αυτήν την εντολή για να γυρίσετε τον διακομιστή:

κόμβος index.js

Μόλις δημιουργήσει μια σύνδεση βάσης δεδομένων, ο διακομιστής θα ξεκινήσει στη θύρα 5000.

Μπορείτε να προχωρήσετε και να δοκιμάσετε τη λειτουργικότητα του GraphQL API κάνοντας αιτήματα HTTP από την παιδική χαρά GraphQL στο πρόγραμμα περιήγησής σας.

Για παράδειγμα, μπορείτε να χρησιμοποιήσετε το δημιουργία Υπάλληλος μετάλλαξη για την προσθήκη νέων δεδομένων εργαζομένων στη βάση δεδομένων MongoDB.

Δημοτικότητα GraphQL στην Κοινότητα προγραμματιστών

Το GraphQL κερδίζει έδαφος στην κοινότητα προγραμματιστών ως μια εναλλακτική προσέγγιση σχεδιασμού API στη δημοφιλή αρχιτεκτονική REST.

Αυτό οφείλεται στην ικανότητά του να παρέχει έναν πιο ευέλικτο και αποτελεσματικό τρόπο ανάκτησης δεδομένων από διάφορες πηγές, όλα από ένα μόνο σημείο εισόδου. Αυτό αποφεύγει τη διαχείριση πολλών τελικών σημείων για διαφορετικά δεδομένα, κάτι που είναι κοινό πρόβλημα με την αρχιτεκτονική REST API. Αυτή η σχεδιαστική λύση απλοποιεί τη διαδικασία δημιουργίας και διαχείρισης backend API.