GraphQL tarjoaa joustavan vaihtoehdon perinteiselle REST-lähestymistapalle, kun rakennat API: ta.

Yksi tärkeimmistä tekijöistä, jotka on otettava huomioon sovellusta suunniteltaessa, on käytettävän API-arkkitehtuurin tyyppi. Tehokas API-suunnittelu on ratkaisevan tärkeää sen varmistamiseksi, että sovellukset toimivat koko elinkaarensa ajan.

RESTful-arkkitehtuuri on suosituin lähestymistapa, mutta sillä on yksi merkittävä haittapuoli: kiinteä päätepisterakenne, joka palauttaa ennalta määrätyt tiedot. Tämä suunnittelu voi johtaa tehottomaan viestintään.

Sitä vastoin GraphQL – vaihtoehto RESTille – tarjoaa enemmän joustavuutta antamalla sinun pyytää vain tarvitsemasi tiedot.

Mitä ovat GraphQL API: t?

GraphQL on kyselykieli, jolla voit kirjoittaa taustasovellusliittymiä (Application Programming Interfaces). Toisin kuin REST-sovellusliittymät, joilla on useita päätepisteitä eri tiedoille, GraphQL-sovellusliittymillä on vain yksi tulopiste.

Asiakkaat voivat määrittää kyselyissään tarvitsemansa tiedot tästä yhdestä syöttöpisteestä, mikä tekee siitä joustavamman ja tehokkaamman hakemaan vain tarpeelliset tiedot.

Yksinkertaisesti sanottuna GraphQL API toteuttaa GraphQL-arkkitehtuurin, jonka kuvailee GraphQL: n tekniset tiedot. Tämä suunnittelu sisältää skeeman, kyselyjen ja mutaatioiden määrittelyn, joiden kanssa asiakkaat voivat olla vuorovaikutuksessa.

Tässä on yksinkertaistettu erittely GraphQL API -arkkitehtuurin olennaisista komponenteista:

  1. Kaavio: Kaava on kuvaus API: n tarjoamista tietotyypeistä ja toiminnoista. Periaatteessa skeema määrittelee käytettävissä olevan tiedon rakenteen ja kyselyjen ja mutaatioiden tyypin, joita asiakas voi suorittaa tietojen muokkaamiseksi.
  2. Kyselyt: Asiakkaat hakevat tietoja tietokannasta kyselyjen avulla määrittämällä tarvitsemansa tiedon rakenteen. Lisäksi ne voivat upottaa useita kyselyitä yhteen HTTP-pyyntöön noutaakseen liittyviä tietoja useista päätepisteistä.
  3. Mutaatiot: Mutaatiot ovat toimintoja, joita käytetään tietokannan tietojen muokkaamiseen. Asiakkaat voivat lähettää mutaatiopyyntöjä tietojen luomiseksi, päivittämiseksi tai poistamiseksi.

Luo MongoDB-tietokanta

Aloita luo MongoDB-tietokanta. Vaihtoehtoisesti voit perustaa MongoDB-klusterin pilveen ilmaiseksi.Kun tietokanta on määritetty, kopioi MongoDB: n tietokantayhteyden URI-merkkijono.

Löydät tämän projektin koodin siitä GitHub-arkisto.

Luo Apollo-palvelin

Apollo palvelin on suosittu GraphQL-palvelintoteutus, jonka avulla voit rakentaa GraphQL-sovellusliittymiä JavaScript-ympäristöissä, mukaan lukien Node.js, Express ja monet muut.

Luo hakemisto uudelle projektille ja CD siihen:

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

Alusta seuraavaksi uusi Node.js-projekti.

npm init -- kyllä

Tämä komento luo a package.json tiedosto.

Asenna vaaditut riippuvuudet

Asenna paketit suorittamalla seuraava komento.

npm asenna apollo-server graphql mongoose

Luo lopuksi an index.js tiedosto projektisi juurihakemistossa.

Asenna Apollo-palvelin

Avata index.js ja lisää alla oleva koodi:

konst { ApolloServer } = vaatia("apollo-palvelin");
konst mangusti = vaatia('mungo');
konst typeDefs = vaatia("./graphql/typeDefs");
konst ratkaisejat = vaatia("./graphql/resolvers");

konst palvelin = Uusi ApolloServer({
typeDefs,
ratkaisijat
});

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

mungo
.connect (MONGO_URI, {
useNewUrlParser: totta,
käytä UnifiedTopologya: totta,
})
.sitten(() => {
konsoli.Hirsi(`Db yhdistetty`);
palata server.listen({ portti: 5000 });
})
.sitten((res) => {
konsoli.Hirsi(`Palvelin käynnissä klo ${res.url}`);
})
.ottaa kiinni(err => {
konsoli.log (err.message);
});

Tämä koodi alustaa paikallisen GraphQL-palvelimen käyttämällä Apollo Server -kirjastoa. Sitten se muodostaa yhteyden MongoDB-tietokantaan annetulla yhteys-URI: lla.

Huomaa, kuinka koodi välittää kaksi argumenttia uudelle ApolloServer-instanssille: typeDefs ja solvers. Nämä määrittävät tietotyypit ja toiminnot, jotka GraphQL API voi suorittaa.

Kun yhteys MongoDB-tietokantaan on muodostettu, palvelin alkaa kuunnella porttia 5000.

Määritä tietomalli

Luo uusi kansio projektikansiosi juurihakemistoon ja nimeä se mallit. Luo tähän kansioon uudet tiedostonimet dataModel.js ja lisää siihen seuraava koodi:

konst {malli, kaava} = vaatia('mungo');

konst työntekijäSchema = Uusi Schema({
nimi: merkkijono,
osasto: merkkijono,
palkka: merkkijono,
});

moduuli.exports = malli('Työntekijä', työntekijäSchema);

Määritä GraphQL-skeema

GraphQL-skeema määrittää niiden tietojen rakenteen, joita voit hakea GraphQL API: n avulla. Kaava hahmottelee myös kyselyt ja mutaatiot, joita API voi suorittaa. Voit käyttää kyselyitä tietojen hakemiseen ja mutaatioita sen muokkaamiseen.

Luo projektisi juurihakemistoon uusi kansio ja nimeä se graphql. Lisää tähän kansioon kaksi tiedostoa: typeDefs.js ja solvers.js

Lisää alla oleva koodi typeDefs.js-tiedostoon:

konst {gql} = vaatia("apollo-palvelin");

konst typeDefs = gql`
kirjoita työntekijä {
minä tein!
nimi: merkkijono
osasto: merkkijono
palkka: merkkijono
}
input EmployeeInput {
nimi: merkkijono
osasto: merkkijono
palkka: merkkijono
}
kirjoita kysely {
getEmployee (tunnus: ID): Työntekijän numeropalata Työntekijä tunnuksella
työntekijät: [työntekijä] #palata joukko / Työntekijät
}
tyyppi mutaatio {
createEmployee (employeeInput: EmployeeInput): Työntekijä
updateEmployee (tunnus: ID, työntekijän syöttö: Työntekijän syöttö): Boolean
poista työntekijä (tunnus: tunnus): Boolean
}
`;

moduuli.exports = typeDefs;

Tämä yllä oleva koodi käyttää gql apollo-server-paketin tarjoama toiminto GraphQL-skeeman luomiseksi työntekijätiedoille.

Kaava koostuu neljästä pääelementistä: työntekijätietojen tietotyypit, syöttötyypit, kyselyt ja mutaatiot, jotka API voi suorittaa.

Määritä GraphQL API: n Ratkaisijat

Ratkaisija on GraphQL-funktio, joka määrittää tiedot, jotka välitetään, kun asiakas lähettää API-kyselyn tietojen hakemiseksi. Pohjimmiltaan sen ensisijainen tehtävä on hakea vaaditut tiedot määritetystä tietolähteestä ja palauttaa ne asiakkaalle.

Lisää alla oleva koodi solvers.js tiedosto tiedostoon graphql kansio. Ratkaisijat määritellään tässä tapauksessa Query- ja Mutation-objekteissa.

Query-objekti määrittää kaksi menetelmää: työntekijät ja getEmployee. Nämä menetelmät vastaavat työntekijätietojen hakemisesta tietokannasta asiakkaan pyynnöstä.

konst Työntekijä = vaatia("../models/employeesModel");

// GraphQL Resolvers
konst ratkaisejat = {
Kysely: {
työntekijät: asynk () => {
yrittää {
konst työntekijät = odottaa Työntekijä.etsi({});
palata työntekijät;
} ottaa kiinni (virhe) {
konsoli.error (virhe);
heittääUusiVirhe("Työntekijöiden hakeminen epäonnistui");
}
},
getEmployee: asynk (vanhempi, args) => {
yrittää {
konst työntekijä = odottaa Employee.findById (args.id);
palata työntekijä;
} ottaa kiinni (virhe) {
konsoli.error (virhe);
heittääUusiVirhe("Työntekijän hakeminen henkilötodistuksella epäonnistui");
}
},
},

Mutaatio-objektilla on kolme menetelmää: luo Työntekijä, päivitä Työntekijä, ja poista Työntekijä. Nämä menetelmät tekevät muutoksia MongoDB-tietokantaan tallennettuihin tietoihin.

 Mutaatio: {
asynk createEmployee (_, { työntekijän syöttö: { nimi, osasto, palkka } }) {
konst uusi työntekijä = Uusi Työntekijä({
nimi: nimi,
osasto: osasto,
palkka: palkka
});

konst vastaus = odottaa newEmployee.save();
konsoli.log (uusi työntekijä);

palata {
id: vastaus._id,
...vastaus._doc
}
},

asynk päivitä työntekijä (_, {id, työntekijän syöttö: {nimi, osasto, palkka}}) {
konst updatedEmployee = odottaa Employee.updateOne(
{ _id: id },
{ nimi, osasto, palkka }
);

jos (!updatedEmployee) {
heittääUusiVirhe(`Työntekijä, jolla on henkilöllisyystodistus: ${id} ei löydy`);
}

palatatotta; // Palauttaa loogisen arvon, joka ilmaisee päivityksen onnistumisen
},

asynk deleteEmployee (_, {id}) {
konst poistettu Työntekijä = odottaa Employee.deleteOne({ _id: id });

jos (!deletedEmployee || deletedEmployee.deletedCount 0) {
heittääUusiVirhe(`Työntekijä, jolla on henkilöllisyystodistus ${id} ei löydy`);
}

palatatotta; // Palauttaa loogisen arvon, joka ilmaisee poiston onnistumisen
},
 },
};

moduuli.exports = ratkaisejat;

Suorita lopuksi tämä komento käynnistääksesi palvelimen:

solmu index.js

Kun se on muodostanut tietokantayhteyden, palvelin käynnistyy portista 5000.

Voit mennä eteenpäin ja testata GraphQL API: n toimivuutta tekemällä HTTP-pyyntöjä GraphQL-leikkikentältä selaimessasi.

Voit käyttää esimerkiksi luo Työntekijä mutaatio uusien työntekijätietojen lisäämiseksi MongoDB-tietokantaan.

GraphQL: n suosio kehittäjäyhteisössä

GraphQL on saamassa vetovoimaa kehittäjäyhteisössä vaihtoehtoisena API-suunnittelutapana suositulle REST-arkkitehtuurille.

Tämä johtuu sen kyvystä tarjota joustavampi ja tehokkaampi tapa hakea tietoja eri lähteistä, kaikki yhdestä syöttöpisteestä. Näin vältytään useiden päätepisteiden hallinnasta eri tiedoille, mikä on yleinen ongelma REST API -arkkitehtuurissa. Tämä suunnitteluratkaisu virtaviivaistaa taustasovellusliittymien rakentamis- ja hallintaprosessia.