GraphQL piedāvā elastīgu alternatīvu klasiskajai REST pieejai, kad veidojat API.

Viens no vissvarīgākajiem faktoriem, kas jāņem vērā, izstrādājot lietojumprogrammu, ir izmantojamās API arhitektūras veids. Efektīvs API dizains ir ļoti svarīgs, lai nodrošinātu, ka lietotnes darbojas visā to dzīves ciklā.

RESTful arhitektūra ir vispopulārākā pieeja, taču tai ir viens būtisks trūkums: fiksēta galapunkta struktūra, kas atgriež iepriekš noteiktus datus. Šis dizains var izraisīt neefektīvu saziņu.

Turpretim GraphQL — alternatīva REST — piedāvā lielāku elastību, ļaujot pieprasīt tikai nepieciešamos datus.

Kas ir GraphQL API?

GraphQL ir vaicājumu valoda, ko varat izmantot, lai rakstītu aizmugursistēmas API (lietojumprogrammu saskarnes). Atšķirībā no REST API, kuriem ir vairāki galapunkti dažādiem datiem, GraphQL API ir tikai viens ieejas punkts.

Klienti savos vaicājumos var norādīt nepieciešamos datus no šī vienotā ievades punkta, padarot to elastīgāku un efektīvāku tikai nepieciešamo datu izgūšanai.

instagram viewer

Vienkārši sakot, GraphQL API īsteno GraphQL arhitektūru, ko apraksta GraphQL specifikācijas. Šis dizains ietver shēmas, vaicājumu un mutāciju definēšanu, ar kurām klienti var mijiedarboties.

Šeit ir vienkāršots GraphQL API arhitektūras būtisko komponentu sadalījums:

  1. Shēma: shēma ir API nodrošināto datu un darbību veidu apraksts. Būtībā shēma nosaka pieejamo datu struktūru un vaicājumu un mutāciju veidu, ko klients var izpildīt, lai modificētu datus.
  2. Vaicājumi: klienti izmanto vaicājumus, lai iegūtu datus no datu bāzes, norādot tiem nepieciešamo datu struktūru. Turklāt tie var ligzdot vairākus vaicājumus vienā HTTP pieprasījumā, lai iegūtu saistītos datus no vairākiem galapunktiem.
  3. Mutācijas: mutācijas ir darbības, ko izmanto datu modificēšanai datubāzē. Klienti var nosūtīt mutācijas pieprasījumus, lai izveidotu, atjauninātu vai dzēstu datus.

Iestatiet MongoDB datu bāzi

Lai sāktu, izveidot MongoDB datu bāzi. Alternatīvi, jūs varat iestatiet MongoDB klasteru mākonī bez maksas.Kad datu bāze ir iestatīta, kopējiet MongoDB datu bāzes savienojuma URI virkni.

Jūs varat atrast šī projekta kodu tajā GitHub repozitorijs.

Izveidojiet Apollo serveri

Apollo serveris ir populāra GraphQL servera ieviešana, kas ļaus jums izveidot GraphQL API JavaScript vidēs, tostarp Node.js, Express un citās.

Izveidojiet direktoriju jaunam projektam un cd tajā:

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

Pēc tam inicializējiet jaunu Node.js projektu.

npm init — jā

Šī komanda izveido a pack.json failu.

Instalējiet vajadzīgās atkarības

Lai instalētu pakotnes, palaidiet šo komandu.

npm instalēt apollo-server graphql mongoose

Visbeidzot izveidojiet an index.js failu sava projekta saknes direktorijā.

Iestatiet Apollo serveri

Atvērt index.js un pievienojiet tālāk norādīto kodu:

konst {ApolloServer} = pieprasīt('apollo-serveris');
konst mangusts = pieprasīt('mangusts');
konst typeDefs = pieprasīt("./graphql/typeDefs");
konst atrisinātāji = pieprasīt("./graphql/resolvers");

konst serveris = jauns ApolloServer({
typeDefs,
atrisinātāji
});

konst MONGO_URI = "mongodb://localhost: 27017";

mangusts
.connect (MONGO_URI, {
useNewUrlParser: taisnība,
izmantojiet vienotu topoloģiju: taisnība,
})
.hen(() => {
konsole.log(`Db savienots`);
atgriezties server.listen({ osta: 5000 });
})
.hen((res) => {
konsole.log(`Serveris darbojas plkst ${res.url}`);
})
.catch(kļūda => {
konsole.log (err.message);
});

Šis kods inicializē lokālo GraphQL serveri, izmantojot Apollo Server bibliotēku. Pēc tam tas izveido savienojumu ar MongoDB datu bāzi ar norādīto savienojuma URI.

Ievērojiet, kā kods jaunajai ApolloServer instancei nodod divus argumentus: typeDefs un atrisinātājus. Tie norāda datu tipus un darbības, kuras var izpildīt GraphQL API.

Kad savienojums ar MongoDB datu bāzi ir izveidots, serveris sāk klausīties portā 5000.

Definējiet datu modeli

Izveidojiet jaunu mapi sava projekta mapes saknes direktorijā un nosauciet to modeļiem. Šajā mapē izveidojiet jaunus failu nosaukumus dataModel.js un pievienojiet tam šādu kodu:

konst {modelis, shēma} = pieprasīt('mangusts');

konst darbinieksShēma = jauns Shēma({
nosaukums: Stīga,
nodaļa: Stīga,
alga: Stīga,
});

modulis.exports = model("Darbinieks", darbinieksShēma);

Definējiet GraphQL shēmu

GraphQL shēma nosaka to datu struktūru, kurus varat vaicāt, izmantojot GraphQL API. Shēmā ir arī izklāstīti vaicājumi un mutācijas, ko var palaist API. Varat izmantot vaicājumus, lai iegūtu datus, un mutācijas, lai tos modificētu.

Projekta saknes direktorijā izveidojiet jaunu mapi un piešķiriet tai nosaukumu graphql. Šajā mapē pievienojiet divus failus: typeDefs.js un solvers.js

Pievienojiet tālāk esošo kodu typeDefs.js failam:

konst {gql} = pieprasīt("apollo-serveris");

konst typeDefs = gql`
tips Darbinieks {
ES izdarīju!
nosaukums: Stīga
nodaļa: Stīga
alga: Stīga
}
input EmployeeInput {
nosaukums: Stīga
nodaļa: Stīga
alga: Stīga
}
ierakstiet vaicājumu {
getEmployee (ID: ID): Darbinieka Nr.atgriezties Darbinieks pēc id
darbinieki: [darbinieks] #atgriezties masīvs no Darbinieki
}
tipa mutācija {
createEmployee (employeeInput: EmployeeInput): Darbinieks
updateEmployee (id: ID, darbinieka ievade: Darbinieka ievade): Būla
dzēstDarbinieku (ID: ID): Būla
}
`;

modulis.exports = typeDefs;

Šis iepriekš minētais kods izmanto gql funkcija, ko nodrošina apollo-servera pakotne, lai izveidotu GraphQL shēmu darbinieku datiem.

Shēma sastāv no četriem galvenajiem elementiem: datu tipi darbinieku informācijai, ievades veidi, vaicājumi un mutācijas, ko var veikt API.

Definējiet GraphQL API atrisinātājus

Atrisinātājs ir GraphQL funkcija, kas definē datus, kas jānodod tālāk, kad klients nosūta API vaicājumu datu iegūšanai. Būtībā tā galvenais uzdevums ir izgūt nepieciešamos datus no norādītā datu avota un atgriezt tos klientam.

Pievienojiet zemāk esošo kodu solvers.js failu mapē graphql mapi. Šajā gadījumā atrisinātāji ir norādīti vaicājuma un mutācijas objektos.

Vaicājuma objekts definē divas metodes: darbiniekiem un getEmployee. Šīs metodes ir atbildīgas par darbinieku datu izgūšanu no datu bāzes pēc klienta pieprasījuma.

konst Darbinieks = pieprasīt("../models/employeesModel");

// GraphQL atrisinātāji
konst atrisinātāji = {
Vaicājums: {
darbinieki: asinhrons () => {
mēģināt {
konst darbinieki = gaidīt Darbinieks.atrast({});
atgriezties darbinieki;
} noķert (kļūda) {
konsole.error (kļūda);
mestjaunsKļūda(“Neizdevās ienest darbiniekus”);
}
},
getEmployee: asinhrons (vecāks, args) => {
mēģināt {
konst darbinieks = gaidīt Employee.findById (args.id);
atgriezties darbinieks;
} noķert (kļūda) {
konsole.error (kļūda);
mestjaunsKļūda(“Neizdevās ienest darbinieku pēc ID”);
}
},
},

Mutācijas objektam ir trīs metodes: izveidotDarbinieku, updateDarbinieks, un dzēstDarbinieku. Šīs metodes veic izmaiņas datos, kas tiek glabāti MongoDB datu bāzē.

 Mutācija: {
asinhrons createEmployee (_, { darbinieka ievade: { vārds, nodaļa, alga } }) {
konst jaunsDarbinieks = jauns Darbinieks({
vārds: vārds,
nodaļa: nodaļa,
alga: alga
});

konst atbilde = gaidīt newEmployee.save();
konsole.log (jaunsDarbinieks);

atgriezties {
id: atbilde._id,
...atbilde._doc
}
},

asinhrons updateEmployee (_, {id, darbinieka ievade: {vārds, nodaļa, alga}}) {
konst updatedDarbinieks = gaidīt Employee.updateOne(
{ _id: id },
{ vārds, nodaļa, alga }
);

ja (!updatedEmployee) {
mestjaunsKļūda(`Darbinieks ar ID: ${id} nav atrasts`);
}

atgrieztiestaisnība; // Atgriež Būla vērtību, kas norāda uz veiksmīgu atjaunināšanu
},

asinhrons dzēstDarbinieku (_, {id}) {
konst dzēstsDarbinieks = gaidīt Employee.deleteOne({ _id: id });

ja (!deletedEmployee || deletedEmployee.deletedCount 0) {
mestjaunsKļūda(`Darbinieks ar ID ${id} nav atrasts`);
}

atgrieztiestaisnība; // Atgriež Būla vērtību, kas norāda uz veiksmīgu dzēšanu
},
 },
};

modulis.exports = atrisinātāji;

Visbeidzot, palaidiet šo komandu, lai atvērtu serveri:

mezgla indekss.js

Kad ir izveidots datu bāzes savienojums, serveris sāks darboties ar portu 5000.

Varat turpināt un pārbaudīt GraphQL API funkcionalitāti, savā pārlūkprogrammā veicot HTTP pieprasījumus no GraphQL rotaļu laukuma.

Piemēram, varat izmantot izveidotDarbinieku mutācija, lai MongoDB datubāzē pievienotu jaunus darbinieku datus.

GraphQL popularitāte izstrādātāju kopienā

GraphQL gūst panākumus izstrādātāju kopienā kā alternatīva API dizaina pieeja populārajai REST arhitektūrai.

Tas ir saistīts ar tā spēju nodrošināt elastīgāku un efektīvāku veidu, kā izgūt datus no dažādiem avotiem, no viena ievades punkta. Tas ļauj izvairīties no nepieciešamības pārvaldīt vairākus galapunktus dažādiem datiem, kas ir izplatīta problēma ar REST API arhitektūru. Šis dizaina risinājums racionalizē aizmugursistēmas API izveides un pārvaldības procesu.