Suhtlus ja andmeedastus mis tahes rakenduse kasutajaliidese ja taustaprogrammi vahel toimub API-de kaudu (Application Programming Interface). Esi- ja tagarakenduste vahel suhtlemiseks kasutatakse palju erinevaid API-sid, näiteks RESTful API, SOAP API, GraphQL API jne. GraphQL API on suhteliselt uus tehnoloogia ja see on palju kiirem kui muud tüüpi API-d. Andmete hankimine andmebaasist GraphQL api abil on palju kiirem kui REST API. GraphQL API kasutamise ajal on kliendil kõigi üksikasjade hankimise asemel kontroll ainult vajalike andmete toomiseks; sellepärast töötab GraphQL API kiiremini kui REST API.
Pakettide installimine
Ehitame sõlme.js rakendus, mis kasutab GraphQL API-d, seega peame installima sõlme.js ja npm selleks enne projekti alustamist.
[meiliga kaitstud]: ~ $ sudo apt-get update -y[meiliga kaitstud]: ~ $ sudo apt-get install nodejs
[meiliga kaitstud]: ~ $ sudo apt-get install npm
Projekti seadistamine
Kasutame sõlme raamistikku 'express'.js meie rakenduse ehitamiseks. Looge kataloog nimega 'graphql' ja algatage projekt.
[meiliga kaitstud]: ~ $ mkdir graphql[meiliga kaitstud]: ~ $ cd graphql /
[meiliga kaitstud]: ~ $ npm init -y
MongoDB seadistamine
Meie GraphQL projektis kasutame oma andmebaasina MongoDB-d. MongoDB on skeemivaba andmebaas ja salvestab andmeid võtmepaaride kujul. MongoDB installimiseks toimige järgmiselt.
Importige MongoDB jaoks avalik GPG-võti.
[meiliga kaitstud]: ~ $ wget -qO - https: // www.mongodb.org / staatiline / pgp / server-4.4.tõus | sudo apt-võti lisada -
Looge mongodbi loendifail.
Värskendage kohalikke hoidlaid.
[meiliga kaitstud]: ~ $ sudo apt-get update -yInstallige mongodbi pakett.
[meiliga kaitstud]: ~ $ sudo apt-get install -y mongodb-orgKäivitage ja lubage mongood.teenus.
[meiliga kaitstud]: ~ $ sudo systemctl start mongod.teenus[meiliga kaitstud]: ~ $ sudo systemctl mongodi lubamine.teenus
Npm moodulite installimine
Meie GraphQL-i rakenduse jaoks peame installima mõned npm paketid. Paigaldame korvid, ekspress-, body-parser, mongoose jne.
[kaitstud meiliga]: ~ $ cd graphql /[meiliga kaitstud]: ~ $ npm install cors express body-parser mongoose - save
GraphQL api loomiseks peame installima täiendava npm paketi nimega 'apollo-server-express.'Seda npm paketti kasutatakse graphQL-serveri käitamiseks kogu sõlme abil.js HTTP raamistikud nagu 'express."
[meiliga kaitstud]: ~ $ npm installige apollo-server-express --saveMongoDB skeemi määratlemine
Nüüd oleme oma keskkonnas seadistanud oma GraphQL-i rakenduse Node'is.js ja on aeg määratleda meie rakenduse skeem. Looge fail 'mudelid / õpilane.js 'projekti juurkataloogis.
// õpilase skeemi määratlemineconst mongoose = nõudma ('mongoose');
const studentSchema = uus mangust.Skeem (
nimi:
tüüp: String,
nõutav: tõene
,
klass:
tüüp: arv,
nõutav: tõsi
,
major:
tüüp: String,
nõutav: tõene
,
ajatemplid: tõsi
);
const Õpilane = mongoose.mudel ('Tudeng', studentSchema);
moodul.eksport = Student, studentSchema
Eespool määratletud skeemis peab igal õpilasel olema nimi, klass ja eriala.
GraphQL API loomine
Pärast üliõpilaste skeemi loomist ehitame nüüd GraphQL API. Looge skeem.js 'GraphQL-i parameetrite kirjutamiseks. GraphQL API-s kasutatakse kahte parameetrit, "tüübid" ja "lahendajad". „Tüüpides” täpsustame oma skeemi, päringud (nt.g., GET-taotluste esitamine) ja mutatsioonid (e.g., UPDATE või DELETE taotluste tegemine) määratud skeemile. Kirjutame „tüüpides” määratletud erinevad meetodid päringute ja mutatsioonide linkimiseks andmebaasi „resolvers”."
// skeemi ja mooduli importimineconst gql = nõudma ('apollo-server-express');
const Õpilane = nõuda ('./ mudelid / õpilane ').Üliõpilane;
// Skeemi, päringu ja mutatsiooni tüübi määratlemine
const tüüpDefs = gql '
tüüp õpilane
ma tegin!,
nimi: String!,
klass: Int!,
major: keelpill!
sisestage päring
getStudents: [üliõpilane],
getStudentById (id: ID!): Õpilane
tüüp Mutatsioon
addStudent (nimi: String!, klass: Int!, major: keelpill! ): Õpilane
updateStudent (nimi: String!, klass: Int!, major: keelpill! ): Õpilane
deleteStudent (id: ID! ): Õpilane
'
// Lahendajate määratlemine
const resolvers =
Päring:
getStudents: (vanem, argumendid) =>
tagasi õpilane.leidma ();
,
getStudentById: (vanem, args) =>
tagasi õpilane.findById (arg.id);
,
Mutatsioon:
addStudent: (vanem, args) =>
olgu õpilane = uus õpilane (
nimi: args.nimi,
klass: arg.klass,
major: arg.major
);
tagasipöörduv õpilane.salvesta ();
,
updateStudent: (vanem, args) =>
kui (!vaidleb vastu.id) tagasipöördumine;
tagasi õpilane.findOneAndUpdate (
_id: argumendid.id
,
$ set:
nimi: args.nimi,
klass: arg.klass,
major: arg.major
,
uus: tõsi, (viga, õpilane) =>
kui (eksima)
konsool.logi (eksima);
muu ;
)
moodul.eksport =
typeDefs,
resolverid
GraphQL API serveri loomine
Nüüd oleme peaaegu valmis GraphQL-i rakenduse loomisega. Ainus samm on serveri loomine. Looge fail nimega 'rakendus.js 'serveri parameetrite konfigureerimiseks.
// vajalike pakettide importimineconst väljendada = nõuda ('väljendada');
const mongoose = nõudma ('mongoose');
const bodyParser = nõuda ('body-parser');
const cors = vaja ('cors');
const ApolloServer = nõuda ('apollo-server-express');
// skeemi importimine
const typeDefs, resolvers = nõuda ('./ skeem ');
// ühendamine MongoDB-ga
const url = “mongodb: // 127.0.0.1: 27017 / õpilased ”;
const ühendama = mongoose.connect (url, useNewUrlParser: true);
ühendada.siis ((db) =>
konsool.log ('Ühendus õnnestus');
, (eksinud) =>
konsool.logi (eksima);
);
// serveri loomine
const server = uus ApolloServer (
typeDefs: typeDefs,
lahendajad: lahendajad
);
const rakendus = ekspress ();
rakendus.kasutamine (bodyParser.json ());
rakendus.use ('*', cors ());
server.ApplyMiddleware (app);
rakendus.kuula (8000, () =>
konsool.logi ('8000 kuulamine');
)
GraphQL API testimine
Meie graphQL-server töötab ja töötab pordil 8000 ja on aeg GraphQL-i API-d testida. Avage brauseris GraphQL-i veebileht, külastades järgmist URL-i.
http: // localhost: 8000 / graphql
Ja see avab järgmise veebilehe.
Lisage õpilane andmebaasi, kasutades graphQL API-d.
Samamoodi lisage veel õpilasi ja pärast õpilase lisamist laske kõik õpilased kasutada GraphQL API-d.
Pange tähele kõigi õpilaste ID-sid ja hankige konkreetne õpilane selle ID-d kasutades.
Järeldus
Andmete hankimine andmebaasist tavalise REST API abil muudab päringu aeglaseks, kuna mõnikord saame rohkem andmeid kui vaja. Kasutades GraphQL-i, saame tuua täpselt vajalikud andmed, mis muudavad GraphQL-i API kiiremaks. Selles demoprojektis on meil ainult üks skeem, seega oleme selle ühe skeemi jaoks loonud GraphQL API. Samuti oleme skeemi jaoks määranud kolm kuni neli meetodit. Vastavalt teie rakendusele saate luua mitu päringut või mutatsioone.