GraphQL nudi fleksibilnu alternativu klasičnom REST pristupu kada gradite API.
Jedan od najvažnijih čimbenika koje treba uzeti u obzir pri dizajniranju aplikacije je vrsta API arhitekture koju ćete koristiti. Učinkovit dizajn API-ja ključan je u osiguravanju performansi aplikacija tijekom cijelog životnog ciklusa.
RESTful arhitektura je najpopularniji pristup, ali ima jedan značajan nedostatak: strukturu fiksne krajnje točke koja vraća unaprijed određene podatke. Ovaj dizajn može rezultirati neučinkovitom komunikacijom.
Nasuprot tome, GraphQL—alternativa REST-u—nudi veću fleksibilnost dopuštajući vam da tražite samo podatke koji su vam potrebni.
Što su GraphQL API-ji?
GraphQL je upitni jezik koji možete koristiti za pisanje backend API-ja (Application Programming Interfaces). Za razliku od REST API-ji, koji imaju više krajnjih točaka za različite podatke, GraphQL API-ji imaju samo jednu ulaznu točku.
Klijenti mogu navesti podatke koji su im potrebni u svojim upitima s ove jedinstvene ulazne točke, čineći je fleksibilnijom i učinkovitijom za dohvaćanje samo potrebnih podataka.
Jednostavno rečeno, GraphQL API implementira GraphQL arhitekturu koju opisuje GraphQL specifikacije. Ovaj dizajn uključuje definiranje sheme, upita i mutacija s kojima klijenti mogu komunicirati.
Ovdje je pojednostavljena raščlamba bitnih komponenti GraphQL API arhitekture:
- Shema: shema je opis vrsta podataka i operacija koje pruža API. U osnovi, shema definira strukturu dostupnih podataka i vrstu upita i mutacija koje klijent može izvršiti za izmjenu podataka.
- Upiti: Klijenti koriste upite za dohvaćanje podataka iz baze podataka određivanjem strukture podataka koji su im potrebni. Štoviše, mogu ugnijezditi više upita u jedan HTTP zahtjev za dohvaćanje povezanih podataka s više krajnjih točaka.
- Mutacije: Mutacije su operacije koje se koriste za modificiranje podataka u bazi podataka. Klijenti mogu slati zahtjeve za mutaciju za stvaranje, ažuriranje ili brisanje podataka.
Postavite MongoDB bazu podataka
Započeti, stvoriti MongoDB bazu podataka. Alternativno, možete besplatno postavite MongoDB klaster u oblaku.Kada postavite svoju bazu podataka, kopirajte MongoDB-ov niz URI veze s bazom podataka.
Kôd ovog projekta možete pronaći u GitHub spremište.
Stvorite Apollo poslužitelj
Apollo poslužitelj je popularna implementacija GraphQL poslužitelja koja će vam omogućiti izradu GraphQL API-ja u JavaScript okruženjima, uključujući Node.js, Express i više.
Napravite imenik za novi projekt i CD u njega:
mkdir graphql-API-mongoDB
cd graphql-API-mongoDB
Zatim inicijalizirajte novi Node.js projekt.
npm init --da
Ova naredba stvara a paket.json datoteka.
Instalirajte potrebne ovisnosti
Pokrenite sljedeću naredbu za instalaciju paketa.
npm instalirajte apollo-poslužitelj graphql mongoose
Na kraju, stvorite index.js datoteku u korijenskom direktoriju vašeg projekta.
Postavite Apollo poslužitelj
Otvoren index.js i dodajte kod ispod:
konst {ApolloServer} = zahtijevati('apollo-poslužitelj');
konst mungos = zahtijevati('mungos');
konst typeDefs = zahtijevati("./graphql/typeDefs");
konst razrješivači = zahtijevati("./graphql/resolvers");konst poslužitelj = novi ApolloServer({
typeDefs,
razrješivači
});konst MONGO_URI = 'mongodb://localhost: 27017';
mungos
.connect (MONGO_URI, {
useNewUrlParser: pravi,
useUnifiedTopology: pravi,
})
.zatim(() => {
konzola.log(`Db povezan`);
povratak server.listen({ luka: 5000 });
})
.zatim((res) => {
konzola.log(`Poslužitelj radi na ${res.url}`);
})
.ulov(pogriješiti => {
konzola.log (poruka o pogrešci);
});
Ovaj kod inicijalizira lokalni GraphQL poslužitelj pomoću biblioteke Apollo Servera. Zatim uspostavlja vezu s MongoDB bazom podataka s danim URI-jem veze.
Primijetite kako kôd prosljeđuje dva argumenta novoj instanci ApolloServera: typeDefs i resolvers. Oni određuju vrste podataka i operacije koje GraphQL API može izvršiti.
Nakon što je veza s MongoDB bazom podataka postavljena, poslužitelj počinje osluškivati na portu 5000.
Definirajte podatkovni model
Napravite novu mapu u korijenskom direktoriju mape vašeg projekta i dajte joj naziv modeli. U ovoj mapi stvorite nove nazive datoteka dataModel.js i dodajte mu sljedeći kod:
konst {model, shema} = zahtijevati('mungos');
konst shema zaposlenika = novi Shema({
Ime: Niz,
odjel: Niz,
plaća: Niz,
});
modul.izvoz = model('Zaposlenik', Shema zaposlenika);
Definirajte GraphQL shemu
GraphQL shema definira strukturu podataka za koje možete postavljati upite pomoću GraphQL API-ja. Shema također ocrtava upite i mutacije koje API može pokrenuti. Možete koristiti upite za dohvaćanje podataka i mutacije za njihovu izmjenu.
U korijenskom direktoriju vašeg projekta stvorite novu mapu i dajte joj naziv graphql. Unutar ove mape dodajte dvije datoteke: typeDefs.js i razrješivači.js
Dodajte kod u nastavku u datoteku typeDefs.js:
konst {gql} = zahtijevati("apollo-poslužitelj");
konst typeDefs = gql`
upišite Zaposlenik {
učinio sam!
Ime: Niz
odjel: Niz
plaća: Niz
}
unos EmployeeInput {
Ime: Niz
odjel: Niz
plaća: Niz
}
upišite upit {
getEmployee (id: ID): broj zaposlenikapovratak Zaposlenik po ID
zaposlenici: [zaposlenik] #povratak niz od Zaposlenici
}
tip Mutacija {
createEmployee (employeeInput: EmployeeInput): Zaposlenik
updateEmployee (id: ID, zaposlenikInput: Unos zaposlenika): Booleov
deleteEmployee (id: ID): Booleov
}
`;
modul.exports = typeDefs;
Ovaj kod iznad koristi gql funkcija koju pruža paket apollo-poslužitelja za stvaranje GraphQL sheme za podatke zaposlenika.
Shema se sastoji od četiri glavna elementa: tipovi podataka za informacije o zaposlenicima, tipovi unosa, upiti i mutacije koje API može izvesti.
Definirajte razlučivače za GraphQL API
Razrešivač je GraphQL funkcija koja definira podatke koji se prosljeđuju kada klijent pošalje API upit za dohvaćanje podataka. U biti, njegova primarna uloga je dohvatiti tražene podatke iz navedenog izvora podataka i vratiti ih klijentu.
Dodajte donji kod u razrješivači.js datoteka u graphql mapa. Razrešivači su u ovom slučaju specificirani unutar objekata Query i Mutation.
Objekt Query definira dvije metode: zaposlenici i getEmployee. Ove su metode odgovorne za dohvaćanje podataka o zaposlenicima iz baze podataka na zahtjev klijenta.
konst Zaposlenik= zahtijevati("../modeli/employeesModel");// GraphQL razlučivači
konst razrješivači = {
Upit: {
zaposlenici: asinkroni () => {
probati {
konst zaposlenici = čekati Employee.find({});
povratak zaposlenici;
} ulov (pogreška) {
konzola.greška (greška);
bacanjenoviGreška('Nije uspjelo dohvaćanje zaposlenika');
}
},
getEmployee: asinkroni (roditelj, argumenti) => {
probati {
konst zaposlenik = čekati Employee.findById (args.id);
povratak zaposlenik;
} ulov (pogreška) {
konzola.greška (greška);
bacanjenoviGreška('Nije uspjelo dohvaćanje zaposlenika po ID-u');
}
},
},
Objekt Mutation ima tri metode: createEmployee, ažurirajZaposlenik, i izbrisati Zaposlenika. Ove metode mijenjaju podatke pohranjene u MongoDB bazi podataka.
Mutacija: {
asinkroni createEmployee (_, { zaposlenikInput: { ime, odjel, plaća } }) {
konst novi zaposlenik = novi Zaposlenik({
ime: ime,
odjel: odjel,
plaća: plaća
});konst odgovor = čekati newEmployee.save();
konzola.log (noviZaposlenik);povratak {
id: odgovor._id,
...odgovor._doc
}
},asinkroni updateEmployee (_, {id, zaposlenikInput: {ime, odjel, plaća}}) {
konst ažuriraniZaposlenik = čekati Employee.updateOne(
{ _iskaznica: iskaznica },
{ ime, odjel, plaća }
);ako (!updatedEmployee) {
bacanjenoviGreška(`Zaposlenik s iskaznicom: ${id} nije pronađeno`);
}povratakpravi; // Vrati Booleovu vrijednost koja ukazuje na uspjeh ažuriranja
},asinkroni deleteEmployee (_, {id}) {
konst izbrisani zaposlenik = čekati Employee.deleteOne({ _iskaznica: iskaznica });
ako (!deletedEmployee || deletedEmployee.deletedCount 0) {
bacanjenoviGreška(`Zaposlenik s iskaznicom ${id} nije pronađeno`);
}povratakpravi; // Vrati Booleovu vrijednost koja pokazuje uspjeh brisanja
},
},
};
modul.exports = razrješivači;
Na kraju, pokrenite ovu naredbu da zavrtite poslužitelj:
indeks čvora.js
Nakon što uspostavi vezu s bazom podataka, poslužitelj će se pokrenuti na portu 5000.
Možete nastaviti i testirati funkcionalnost GraphQL API-ja postavljanjem HTTP zahtjeva s igrališta GraphQL u svom pregledniku.
Na primjer, možete koristiti createEmployee mutacija za dodavanje novih podataka o zaposlenicima u MongoDB bazu podataka.
Popularnost GraphQL-a u zajednici programera
GraphQL postaje sve popularniji u zajednici programera kao alternativni API dizajn pristup popularnoj REST arhitekturi.
To je zbog njegove sposobnosti da pruži fleksibilniji i učinkovitiji način za dohvaćanje podataka iz različitih izvora, sve s jedne ulazne točke. Time se izbjegava upravljanje višestrukim krajnjim točkama za različite podatke, što je čest problem s REST API arhitekturom. Ovo dizajnersko rješenje pojednostavljuje proces izgradnje i upravljanja pozadinskim API-jima.