GraphQL siūlo lanksčią alternatyvą klasikiniam REST metodui, kai kuriate API.

Vienas iš svarbiausių veiksnių, į kurį reikia atsižvelgti kuriant programą, yra naudotinos API architektūros tipas. Veiksmingas API dizainas yra labai svarbus siekiant užtikrinti, kad programos veiktų visą savo gyvavimo ciklą.

RESTful architektūra yra populiariausias metodas, tačiau jis turi vieną reikšmingą trūkumą: fiksuotą galutinio taško struktūrą, kuri grąžina iš anksto nustatytus duomenis. Šis dizainas gali sukelti neefektyvų ryšį.

Priešingai, GraphQL – alternatyva REST – siūlo daugiau lankstumo, nes leidžia prašyti tik jums reikalingų duomenų.

Kas yra GraphQL API?

GraphQL yra užklausų kalba, kuria galite rašyti užpakalines API (programavimo programavimo sąsajas). Skirtingai nei REST API, kurios turi kelis skirtingų duomenų galinius taškus, GraphQL API turi tik vieną įėjimo tašką.

Klientai savo užklausose gali nurodyti reikalingus duomenis iš šio vieno įvesties taško, todėl jis lankstesnis ir efektyvesnis, kai gaunami tik reikalingi duomenys.

instagram viewer

Paprasčiau tariant, GraphQL API įgyvendina GraphQL architektūrą, aprašytą GraphQL specifikacijos. Šis dizainas apima schemos, užklausų ir mutacijų, su kuriomis klientai gali bendrauti, apibrėžimą.

Čia yra supaprastintas pagrindinių GraphQL API architektūros komponentų suskirstymas:

  1. Schema: schema yra API teikiamų duomenų ir operacijų tipų aprašymas. Iš esmės schema apibrėžia turimų duomenų struktūrą ir užklausų bei mutacijų, kurias klientas gali vykdyti, kad pakeistų duomenis, tipą.
  2. Užklausos: klientai naudoja užklausas norėdami gauti duomenis iš duomenų bazės, nurodydami jiems reikalingų duomenų struktūrą. Be to, jie gali įdėti kelias užklausas vienoje HTTP užklausoje, kad gautų susijusius duomenis iš kelių galinių taškų.
  3. Mutacijos: mutacijos yra operacijos, naudojamos duomenų bazės duomenims keisti. Klientai gali siųsti mutacijų užklausas kurti, atnaujinti arba ištrinti duomenis.

Sukurkite MongoDB duomenų bazę

Pradėti, sukurti MongoDB duomenų bazę. Arba galite nemokamai sukurkite MongoDB klasterį debesyje.Kai nustatysite duomenų bazę, nukopijuokite MongoDB duomenų bazės ryšio URI eilutę.

Šio projekto kodą galite rasti jame GitHub saugykla.

Sukurkite „Apollo“ serverį

Apollo serveris yra populiarus GraphQL serverio diegimas, kuris leis jums kurti GraphQL API JavaScript aplinkose, įskaitant Node.js, Express ir kt.

Sukurkite katalogą naujam projektui ir cd tuo susidomėjęs:

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

Tada inicijuokite naują Node.js projektą.

npm init – taip

Ši komanda sukuria a package.json failą.

Įdiekite reikiamas priklausomybes

Norėdami įdiegti paketus, paleiskite šią komandą.

npm įdiegti apollo-server graphql mongoose

Galiausiai sukurkite an index.js failą savo projekto šakniniame kataloge.

Nustatykite „Apollo“ serverį

Atviras index.js ir pridėkite žemiau esantį kodą:

konst { ApolloServer } = reikalauti("apolo serveris");
konst mangustas = reikalauti("mangustas");
konst typeDefs = reikalauti("./graphql/typeDefs");
konst sprendėjai = reikalauti("./graphql/resolvers");

konst serveris = naujas ApolloServer({
typeDefs,
sprendėjai
});

konst MONGO_URI = „mongodb://localhost: 27017“;

mangustas
.connect (MONGO_URI, {
useNewUrlParser: tiesa,
naudokite vieningą topologiją: tiesa,
})
.thena(() => {
konsolė.log(„Db prijungtas“.);
grąžinti server.listen({ uostas: 5000 });
})
.thena((res) => {
konsolė.log(`Serveris veikia ${res.url}`);
})
.catch(klysti => {
konsolė.log (err.message);
});

Šis kodas inicijuoja vietinį GraphQL serverį, naudodamas Apollo serverio biblioteką. Tada jis užmezga ryšį su MongoDB duomenų baze su nurodytu ryšio URI.

Atkreipkite dėmesį, kaip kodas perduoda du argumentus naujam ApolloServer egzemplioriui: typeDefs ir rezoliucijos. Jie nurodo duomenų tipus ir operacijas, kurias gali vykdyti GraphQL API.

Nustačius ryšį su MongoDB duomenų baze, serveris pradeda klausytis per 5000 prievadą.

Apibrėžkite duomenų modelį

Sukurkite naują aplanką savo projekto aplanko šakniniame kataloge ir pavadinkite jį modeliai. Šiame aplanke sukurkite naujus failų pavadinimus dataModel.js ir pridėkite prie jo šį kodą:

konst {modelis, schema} = reikalauti("mangustas");

konst darbuotojasSchema = naujas Schema({
vardas: Styga,
skyrius: Styga,
atlyginimas: Styga,
});

modulis.exports = model('Darbuotojas', darbuotojasSchema);

Apibrėžkite GraphQL schemą

GraphQL schema apibrėžia duomenų, kurių užklausą galite pateikti naudodami GraphQL API, struktūrą. Schemoje taip pat nurodomos užklausos ir mutacijos, kurias gali vykdyti API. Duomenims gauti galite naudoti užklausas, o modifikuoti – mutacijas.

Projekto šakniniame kataloge sukurkite naują aplanką ir pavadinkite jį graphql. Šiame aplanke pridėkite du failus: typeDefs.js ir solvers.js

Pridėkite toliau pateiktą kodą į typeDefs.js failą:

konst {gql} = reikalauti("apolo serveris");

konst typeDefs = gql`
tipo darbuotojas {
aš padariau!
vardas: Styga
skyrius: Styga
atlyginimas: Styga
}
input EmployeeInput {
vardas: Styga
skyrius: Styga
atlyginimas: Styga
}
įveskite užklausą {
getEmployee (ID: ID): Darbuotojo Nr.grąžinti Darbuotojas pagal id
darbuotojai: [darbuotojas] #grąžinti masyvas apie Darbuotojai
}
tipo mutacija {
createEmployee (employeeInput: EmployeeInput): Darbuotojas
updateEmployee (ID: ID, darbuotojo įvestis: Darbuotojo įvestis): Būlio
ištrinti Darbuotoją (ID: ID): Būlio
}
`;

modulis.exports = typeDefs;

Šis aukščiau pateiktas kodas naudoja gql funkcija, kurią teikia paketas apollo-server, kad sukurtų GraphQL schemą darbuotojo duomenims.

Schemą sudaro keturi pagrindiniai elementai: darbuotojų informacijos duomenų tipai, įvesties tipai, užklausos ir mutacijos, kurias gali atlikti API.

Apibrėžkite GraphQL API sprendimus

Rašiklis yra GraphQL funkcija, kuri apibrėžia duomenis, kurie turi būti perduodami, kai klientas siunčia API užklausą duomenims gauti. Iš esmės pagrindinis jo vaidmuo yra gauti reikiamus duomenis iš nurodyto duomenų šaltinio ir grąžinti juos klientui.

Pridėkite žemiau esantį kodą prie solvers.js failą graphql aplanką. Šiuo atveju sprendėjai nurodomi užklausos ir mutacijos objektuose.

Užklausos objektas apibrėžia du metodus: darbuotojų ir getEmployee. Šie metodai yra atsakingi už darbuotojų duomenų gavimą iš duomenų bazės klientui paprašius.

konst Darbuotojas = reikalauti("../models/employeesModel");

// GraphQL sprendikliai
konst sprendėjai = {
Užklausa: {
darbuotojai: async () => {
bandyti {
konst darbuotojai = laukti Darbuotojas.rasti({});
grąžinti darbuotojai;
} sugauti (klaida) {
konsolė.error (klaida);
mestinaujasKlaida(„Nepavyko gauti darbuotojų“);
}
},
getEmployee: async (tėvas, args) => {
bandyti {
konst darbuotojas = laukti Employee.findById (args.id);
grąžinti darbuotojas;
} sugauti (klaida) {
konsolė.error (klaida);
mestinaujasKlaida(„Nepavyko gauti darbuotojo pagal ID“);
}
},
},

Mutacijos objektas turi tris metodus: sukurti Darbuotoją, atnaujintiDarbuotojas, ir ištrinti Darbuotoją. Šie metodai pakeičia duomenis, saugomus MongoDB duomenų bazėje.

 Mutacija: {
async CreateEmployee (_, { darbuotojo įvestis: { vardas, skyrius, atlyginimas } }) {
konst naujas darbuotojas = naujas Darbuotojas({
vardas: vardas,
skyrius: skyrius,
atlyginimas: atlyginimas
});

konst atsakymas = laukti newEmployee.save();
konsolė.log (naujas darbuotojas);

grąžinti {
id: atsakymas._id,
...atsakymas._doc
}
},

async updateEmployee (_, {id, darbuotojo įvestis: {vardas, skyrius, atlyginimas}}) {
konst updatedDarbuotojas = laukti Employee.updateOne(
{ _id: id },
{ vardas, skyrius, atlyginimas }
);

jeigu (!updatedEmployee) {
mestinaujasKlaida(„Darbuotojas su ID: ${id} nerasta');
}

grąžintitiesa; // Grąžina loginę reikšmę, nurodant sėkmingą atnaujinimą
},

async ištrinti Darbuotoją (_, {id}) {
konst ištrintasDarbuotojas = laukti Employee.deleteOne({ _id: id });

jeigu (!deletedEmployee || deletedEmployee.deletedCount 0) {
mestinaujasKlaida(„Darbuotojas su asmens tapatybės dokumentu ${id} nerasta');
}

grąžintitiesa; // Grąžina loginę reikšmę, rodančią sėkmingą ištrynimą
},
 },
};

modulis.exports = sprendėjai;

Galiausiai paleiskite šią komandą, kad suaktyvintumėte serverį:

mazgo indeksas.js

Užmezgus duomenų bazės ryšį, serveris paleidžiamas 5000 prievadu.

Galite eiti į priekį ir išbandyti GraphQL API funkcionalumą pateikdami HTTP užklausas iš GraphQL žaidimų aikštelės savo naršyklėje.

Pavyzdžiui, galite naudoti sukurti Darbuotoją mutacija, kad į MongoDB duomenų bazę būtų įtraukti nauji darbuotojo duomenys.

GraphQL populiarumas kūrėjų bendruomenėje

GraphQL vis labiau populiarėja kūrėjų bendruomenėje kaip alternatyvus API dizaino metodas populiariajai REST architektūrai.

Taip yra dėl galimybės lanksčiau ir efektyviau gauti duomenis iš įvairių šaltinių, iš vieno įvesties taško. Taip išvengiama kelių skirtingų duomenų galinių taškų valdymo, o tai yra dažna REST API architektūros problema. Šis dizaino sprendimas supaprastina užpakalinių API kūrimo ir valdymo procesą.