GraphQL ponúka flexibilnú alternatívu ku klasickému prístupu REST pri vytváraní API.

Jedným z najdôležitejších faktorov, ktoré treba zvážiť pri navrhovaní aplikácie, je typ architektúry API, ktorý sa má použiť. Efektívny dizajn API je rozhodujúci pre zabezpečenie výkonnosti aplikácií počas celého životného cyklu.

RESTful architektúra je najpopulárnejší prístup, má však jednu významnú nevýhodu: pevnú štruktúru koncového bodu, ktorá vracia vopred určené údaje. Tento dizajn môže viesť k neefektívnej komunikácii.

Na rozdiel od toho GraphQL – alternatíva k REST – ponúka väčšiu flexibilitu tým, že vám umožňuje požadovať iba tie údaje, ktoré potrebujete.

Čo sú to GraphQL API?

GraphQL je dotazovací jazyk, ktorý môžete použiť na písanie backendových API (Application Programming Interfaces). Na rozdiel od REST API, ktoré majú viacero koncových bodov pre rôzne údaje, majú rozhrania GraphQL API iba jeden vstupný bod.

Klienti môžu špecifikovať údaje, ktoré potrebujú vo svojich dopytoch z tohto jediného vstupného bodu, vďaka čomu je flexibilnejší a efektívnejší pri získavaní iba nevyhnutných údajov.

instagram viewer

Jednoducho povedané, GraphQL API implementuje architektúru GraphQL opísanú v Špecifikácie GraphQL. Tento návrh zahŕňa definovanie schémy, dotazov a mutácií, s ktorými môžu klienti interagovať.

Tu je zjednodušený rozpis základných komponentov architektúry GraphQL API:

  1. Schéma: Schéma je popis typov údajov a operácií, ktoré poskytuje API. Schéma v podstate definuje štruktúru dostupných údajov a typ dotazov a mutácií, ktoré môže klient vykonať na úpravu údajov.
  2. Dotazy: Klienti používajú dotazy na získanie údajov z databázy zadaním štruktúry údajov, ktoré požadujú. Okrem toho môžu vnoriť viacero dotazov do jedinej požiadavky HTTP na načítanie súvisiacich údajov z viacerých koncových bodov.
  3. Mutácie: Mutácie sú operácie používané na úpravu údajov v databáze. Klienti môžu posielať žiadosti o mutácie na vytvorenie, aktualizáciu alebo odstránenie údajov.

Nastavte databázu MongoDB

Začať, vytvorte databázu MongoDB. Prípadne môžete nastaviť MongoDB klaster v cloude zadarmo.Akonáhle budete mať databázu nastavenú, skopírujte reťazec URI pripojenia k databáze MongoDB.

Kód tohto projektu nájdete v ňom úložisko GitHub.

Vytvorte server Apollo

Server Apollo je populárna implementácia servera GraphQL, ktorá vám umožní vytvárať rozhrania API GraphQL v prostrediach JavaScript, vrátane Node.js, Express a ďalších.

Vytvorte adresár pre nový projekt a cd do toho:

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

Ďalej inicializujte nový projekt Node.js.

npm init --áno

Tento príkaz vytvorí a package.json súbor.

Nainštalujte požadované závislosti

Spustite nasledujúci príkaz na inštaláciu balíkov.

npm nainštalovať apollo-server graphql mongoose

Nakoniec vytvorte index.js súbor v koreňovom adresári vášho projektu.

Nastavte server Apollo

OTVORENÉ index.js a pridajte kód nižšie:

konšt { ApolloServer } = vyžadovať('apollo-server');
konšt mangusta = vyžadovať("mongoose");
konšt typeDefs = vyžadovať("./graphql/typeDefs");
konšt riešitelia = vyžadovať("./graphql/resolvers");

konšt server = Nový ApolloServer({
typeDefs,
riešiteľov
});

konšt MONGO_URI = 'mongodb://localhost: 27017';

mangusta
.connect (MONGO_URI, {
useNewUrlParser: pravda,
použiteUnifiedTopology: pravda,
})
.potom(() => {
konzoly.log(`Db Connected`);
vrátiť server.listen({ prístav: 5000 });
})
.potom((res) => {
konzoly.log(`Server beží na ${res.url}`);
})
.catch(chybovať => {
konzoly.log (chyba.sprava);
});

Tento kód inicializuje lokálny server GraphQL pomocou knižnice servera Apollo. Potom vytvorí pripojenie k databáze MongoDB s daným URI pripojenia.

Všimnite si, ako kód odovzdáva dva argumenty novej inštancii ApolloServer: typeDefs a resolvery. Tieto špecifikujú typy údajov a operácie, ktoré môže rozhranie GraphQL API vykonávať.

Po nastavení pripojenia k databáze MongoDB server začne počúvať na porte 5000.

Definujte dátový model

Vytvorte nový priečinok v koreňovom adresári priečinka projektu a pomenujte ho modelov. V tomto priečinku vytvorte nové názvy súborov dataModel.js a pridajte k nemu nasledujúci kód:

konšt {model, schéma} = vyžadovať("mongoose");

konšt zamestnanecSchema = Nový Schéma({
názov: Reťazec,
oddelenie: Reťazec,
plat: Reťazec,
});

modul.export = model('zamestnanec', zamestnanecSchema);

Definujte schému GraphQL

Schéma GraphQL definuje štruktúru údajov, ktoré môžete dotazovať pomocou rozhrania GraphQL API. Schéma tiež načrtáva dotazy a mutácie, ktoré môže API spustiť. Dotazy môžete použiť na získanie údajov a mutácie na ich úpravu.

V koreňovom adresári projektu vytvorte nový priečinok a pomenujte ho graphql. Do tohto priečinka pridajte dva súbory: typeDefs.js a resolvers.js

Pridajte kód nižšie do súboru typeDefs.js:

konšt {gql} = vyžadovať("apollo-server");

konšt typeDefs = gql`
typ Zamestnanec {
urobil som!
názov: Reťazec
oddelenie: Reťazec
plat: Reťazec
}
input EmployeeInput {
názov: Reťazec
oddelenie: Reťazec
plat: Reťazec
}
zadajte dopyt {
getEmployee (id: ID): Zamestnanec #vrátiť Zamestnanec podľa ID
zamestnanci: [Zamestnanec] #vrátiť pole z zamestnancov
}
type Mutation {
createEmployee (employeeInput: EmployeeInput): Zamestnanec
updateEmployee (id: ID, zamestnanecInput: Zamestnanecký vstup): Boolean
deleteEmployee (id: ID): Boolean
}
`;

modul.exports = typeDefs;

Tento kód vyššie používa gql funkcia poskytovaná balíkom apollo-server na vytvorenie schémy GraphQL pre údaje o zamestnancovi.

Schéma pozostáva zo štyroch hlavných prvkov: dátové typy pre informácie o zamestnancoch, typy vstupov, dotazy a mutácie, ktoré môže API vykonávať.

Definujte Resolvery pre GraphQL API

Resolver je funkcia GraphQL, ktorá definuje údaje, ktoré sa majú odovzdať, keď klient odošle dotaz API na načítanie údajov. Jeho primárnou úlohou je v podstate získať požadované údaje zo špecifikovaného zdroja údajov a vrátiť ich klientovi.

Pridajte kód nižšie do resolvers.js súbor v graphql priečinok. Rozkladače sú v tomto prípade špecifikované v objektoch Query a Mutation.

Objekt Query definuje dve metódy: zamestnancov a getEmployee. Tieto metódy sú zodpovedné za získanie údajov o zamestnancoch z databázy na požiadanie klienta.

konšt Zamestnanec = vyžadovať("../models/employeesModel");

// Resolvery GraphQL
konšt rozkladače = {
Dopyt: {
zamestnanci: async () => {
skúste {
konšt zamestnanci = čakať Employee.find({});
vrátiť zamestnancov;
} chytiť (chyba) {
konzoly.chyba (chyba);
hodiťNovýChyba(„Nepodarilo sa načítať zamestnancov“);
}
},
getEmployee: async (rodič, argumenty) => {
skúste {
konšt zamestnanec = čakať Employee.findById (args.id);
vrátiť zamestnanec;
} chytiť (chyba) {
konzoly.chyba (chyba);
hodiťNovýChyba(„Nepodarilo sa načítať zamestnanca podľa ID“);
}
},
},

Objekt Mutation má tri metódy: vytvoriť zamestnanca, aktualizovaťZamestnanec, a deleteEmployee. Tieto metódy vykonávajú zmeny v údajoch uložených v databáze MongoDB.

 Mutácia: {
async createEmployee (_, { zamestnanecInput: { meno, oddelenie, plat } }) {
konšt novýZamestnanec = Nový Zamestnanec({
meno: meno,
oddelenie: oddelenie,
plat: plat
});

konšt odpoveď = čakať novyZamestnanec.save();
konzoly.log (novýZamestnanec);

vrátiť {
id: response._id,
...odpoveď._doc
}
},

async updateEmployee (_, {id, zamestnanecInput: {meno, oddelenie, plat}}) {
konšt aktualizovanýZamestnanec = čakať Employee.updateOne(
{ _id: id },
{ meno, oddelenie, plat }
);

ak (!updatedEmployee) {
hodiťNovýChyba(„Zamestnanec s ID: ${id} nenájdené');
}

vrátiťpravda; // Vráti boolovskú hodnotu označujúcu úspešnosť aktualizácie
},

async deleteEmployee (_, {id}) {
konšt vymazanýZamestnanec = čakať Employee.deleteOne({ _id: id});

ak (!deletedEmployee || deleteEmployee.deletedCount 0) {
hodiťNovýChyba(„Zamestnanec s ID ${id} nenájdené');
}

vrátiťpravda; // Vráti boolovskú hodnotu označujúcu úspešné odstránenie
},
 },
};

modul.export = resolvery;

Nakoniec spustite tento príkaz na roztočenie servera:

node index.js

Po vytvorení pripojenia k databáze sa server spustí na porte 5000.

Môžete pokračovať a otestovať funkčnosť rozhrania GraphQL API zadaním požiadaviek HTTP z ihriska GraphQL vo vašom prehliadači.

Môžete napríklad použiť vytvoriť zamestnanca mutácia na pridanie nových údajov o zamestnancoch do databázy MongoDB.

Popularita GraphQL v komunite vývojárov

GraphQL si získava priazeň v komunite vývojárov ako alternatívny prístup k dizajnu API k populárnej architektúre REST.

Je to kvôli jeho schopnosti poskytnúť flexibilnejší a efektívnejší spôsob získavania údajov z rôznych zdrojov, a to všetko z jedného vstupného bodu. Tým sa vyhnete nutnosti spravovať viacero koncových bodov pre rôzne údaje, čo je bežný problém architektúry REST API. Toto dizajnové riešenie zefektívňuje proces vytvárania a správy backendových API.