GraphQL ponuja prilagodljivo alternativo klasičnemu pristopu REST, ko gradite API.
Eden najpomembnejših dejavnikov, ki jih je treba upoštevati pri načrtovanju aplikacije, je vrsta arhitekture API-ja, ki jo je treba uporabiti. Učinkovita zasnova API-ja je ključna pri zagotavljanju, da so aplikacije zmogljive v celotnem življenjskem ciklu.
Arhitektura RESTful je najbolj priljubljen pristop, vendar ima eno pomembno pomanjkljivost: fiksno strukturo končne točke, ki vrne vnaprej določene podatke. Ta oblika lahko povzroči neučinkovito komunikacijo.
Nasprotno pa GraphQL – alternativa REST-u – ponuja večjo prilagodljivost, saj vam omogoča, da zahtevate le podatke, ki jih potrebujete.
Kaj so API-ji GraphQL?
GraphQL je poizvedbeni jezik, ki ga lahko uporabite za pisanje zalednih API-jev (vmesnikov za programiranje aplikacij). Za razliko od API-ji REST, ki imajo več končnih točk za različne podatke, imajo API-ji GraphQL samo eno vstopno točko.
Odjemalci lahko določijo podatke, ki jih potrebujejo v svojih poizvedbah s te enotne vstopne točke, zaradi česar je bolj prilagodljiva in učinkovita za pridobivanje samo potrebnih podatkov.
Preprosto povedano, GraphQL API implementira arhitekturo GraphQL, ki jo opisuje Specifikacije GraphQL. Ta zasnova vključuje definiranje sheme, poizvedb in mutacij, s katerimi lahko stranke komunicirajo.
Tukaj je poenostavljena razčlenitev bistvenih komponent arhitekture GraphQL API:
- Shema: shema je opis vrst podatkov in operacij, ki jih ponuja API. V bistvu shema definira strukturo razpoložljivih podatkov ter vrsto poizvedb in mutacij, ki jih lahko odjemalec izvede za spreminjanje podatkov.
- Poizvedbe: odjemalci uporabljajo poizvedbe za pridobivanje podatkov iz baze podatkov tako, da določijo strukturo podatkov, ki jih potrebujejo. Poleg tega lahko ugnezdijo več poizvedb v eno zahtevo HTTP, da pridobijo povezane podatke iz več končnih točk.
- Mutacije: Mutacije so operacije, ki se uporabljajo za spreminjanje podatkov v bazi podatkov. Odjemalci lahko pošljejo zahteve za mutacijo za ustvarjanje, posodobitev ali brisanje podatkov.
Nastavite bazo podatkov MongoDB
Za začetek, ustvarite bazo podatkov MongoDB. Lahko pa tudi brezplačno nastavite gručo MongoDB v oblaku.Ko nastavite bazo podatkov, kopirajte niz URI povezave baze podatkov MongoDB.
Kodo tega projekta najdete v Repozitorij GitHub.
Ustvarite strežnik Apollo
Strežnik Apollo je priljubljena implementacija strežnika GraphQL, ki vam bo omogočila gradnjo API-jev GraphQL v okoljih JavaScript, vključno z Node.js, Express in drugimi.
Ustvarite imenik za nov projekt in cd vanj:
mkdir graphql-API-mongoDB
cd graphql-API-mongoDB
Nato inicializirajte nov projekt Node.js.
npm init --da
Ta ukaz ustvari a package.json mapa.
Namestite zahtevane odvisnosti
Zaženite naslednji ukaz za namestitev paketov.
npm namestite apollo-strežnik graphql mongoose
Končno ustvarite index.js datoteko v korenskem imeniku vašega projekta.
Nastavite strežnik Apollo
Odprto index.js in dodajte spodnjo kodo:
konst {ApolloServer} = zahtevati('apollo-server');
konst mungos = zahtevati('mungos');
konst typeDefs = zahtevati("./graphql/typeDefs");
konst razreševalci = zahtevati("./graphql/resolvers");konst strežnik = novo ApolloServer({
typeDefs,
razreševalci
});konst MONGO_URI = 'mongodb://localhost: 27017';
mungos
.connect (MONGO_URI, {
useNewUrlParser: prav,
useUnifiedTopology: prav,
})
.potem(() => {
konzola.log(`Db Connected`);
vrnitev server.listen({ pristanišče: 5000 });
})
.potem((res) => {
konzola.log(`Strežnik deluje na ${res.url}`);
})
.catch(napaka => {
konzola.log (sporočilo o napaki);
});
Ta koda inicializira lokalni strežnik GraphQL z uporabo knjižnice Apollo Server. Nato vzpostavi povezavo z bazo podatkov MongoDB z danim URI-jem povezave.
Opazite, kako koda posreduje dva argumenta novemu primerku ApolloServerja: typeDefs in resolvers. Ti določajo tipe podatkov in operacije, ki jih lahko izvaja GraphQL API.
Ko je povezava z bazo podatkov MongoDB nastavljena, strežnik začne poslušati na vratih 5000.
Definirajte podatkovni model
Ustvarite novo mapo v korenskem imeniku mape projekta in jo poimenujte modeli. V tej mapi ustvarite nova imena datotek dataModel.js in ji dodajte naslednjo kodo:
konst {model, shema} = zahtevati('mungos');
konst shema zaposlenih = novo Shema({
ime: Vrvica,
oddelek: Vrvica,
plača: Vrvica,
});
modul.exports = model('zaposleni', shema zaposlenega);
Definirajte shemo GraphQL
Shema GraphQL določa strukturo podatkov, po katerih lahko poizvedujete z API-jem GraphQL. Shema opisuje tudi poizvedbe in mutacije, ki jih lahko izvaja API. Uporabite lahko poizvedbe za pridobivanje podatkov in mutacije za njihovo spreminjanje.
V korenskem imeniku vašega projekta ustvarite novo mapo in jo poimenujte graphql. V to mapo dodajte dve datoteki: typeDefs.js in resolvers.js
Dodajte spodnjo kodo v datoteko typeDefs.js:
konst {gql} = zahtevati("apollo-strežnik");
konst typeDefs = gql`
type Employee {
jaz sem!
ime: Vrvica
oddelek: Vrvica
plača: Vrvica
}
vnos EmployeeInput {
ime: Vrvica
oddelek: Vrvica
plača: Vrvica
}
vnesite poizvedbo {
getEmployee (id: ID): # zaposlenegavrnitev Delavec po id
zaposleni: [zaposleni] #vrnitev niz od Zaposleni
}
vrsta mutacije {
createEmployee (employeeInput: EmployeeInput): Zaposleni
updateEmployee (id: ID, employeeInput: EmployeeInput): Boolean
deleteEmployee (id: ID): Boolean
}
`;
modul.exports = typeDefs;
Ta koda zgoraj uporablja gql funkcijo, ki jo zagotavlja paket apollo-server za ustvarjanje sheme GraphQL za podatke zaposlenih.
Shema je sestavljena iz štirih glavnih elementov: tipov podatkov za informacije o zaposlenih, tipov vnosa, poizvedb in mutacij, ki jih API lahko izvede.
Definirajte razreševalce za GraphQL API
Razreševalec je funkcija GraphQL, ki definira podatke, ki se posredujejo, ko odjemalec pošlje poizvedbo API za pridobivanje podatkov. V bistvu je njegova primarna vloga pridobiti zahtevane podatke iz navedenega vira podatkov in jih vrniti odjemalcu.
Dodajte spodnjo kodo v resolvers.js datoteka v graphql mapo. Rezločevalci so v tem primeru podani znotraj predmetov Query in Mutation.
Objekt Query definira dve metodi: zaposlenih in getEmployee. Te metode so odgovorne za pridobivanje podatkov o zaposlenih iz baze podatkov na zahtevo stranke.
konst Zaposleni= zahtevati("../models/employeesModel");// Rezločevalci GraphQL
konst razreševalci = {
Poizvedba: {
zaposleni: asinh () => {
poskusi {
konst zaposleni = čakati Employee.find({});
vrnitev zaposleni;
} ulov (napaka) {
konzola.error (napaka);
metatinovoNapaka(»Zaposlenih ni bilo mogoče pridobiti«);
}
},
getEmployee: asinh (nadrejeni, argumenti) => {
poskusi {
konst uslužbenec = čakati Employee.findById (args.id);
vrnitev zaposleni;
} ulov (napaka) {
konzola.error (napaka);
metatinovoNapaka(»Uslužbenca ni bilo mogoče pridobiti po ID-ju«);
}
},
},
Objekt Mutation ima tri metode: createEmployee, updateEmployee, in deleteEmployee. Te metode spreminjajo podatke, shranjene v bazi podatkov MongoDB.
Mutacija: {
asinh createEmployee (_, { employeeInput: { ime, oddelek, plača } }) {
konst novzaposleni = novo Zaposleni({
ime: ime,
oddelek: oddelek,
plača: plača
});konst odgovor = čakati newEmployee.save();
konzola.log (nov uslužbenec);vrnitev {
id: odgovor._id,
...odziv._doc
}
},asinh updateEmployee (_, {id, employeeInput: {ime, oddelek, plača}}) {
konst posodobljenZaposleni = čakati Employee.updateOne(
{ _id: id },
{ime, oddelek, plača}
);če (!updatedEmployee) {
metatinovoNapaka(`Zaposleni z ID: ${id} ni najden`);
}vrnitevprav; // Vrne logično vrednost, ki označuje uspešno posodobitev
},asinh deleteEmployee (_, {id}) {
konst izbrisanZaposleni = čakati Employee.deleteOne({ _id: id });
če (!deletedEmployee || deletedEmployee.deletedCount 0) {
metatinovoNapaka(`Uslužbenec z izkaznico ${id} ni najden`);
}vrnitevprav; // Vrne logično vrednost, ki označuje uspeh izbrisa
},
},
};
modul.exports = razreševalci;
Na koncu zaženite ta ukaz, da zavrtite strežnik:
vozlišče index.js
Ko vzpostavi povezavo z bazo podatkov, se bo strežnik zagnal na vratih 5000.
Lahko nadaljujete in preizkusite funkcionalnost API-ja GraphQL tako, da naredite zahteve HTTP z igrišča GraphQL v svojem brskalniku.
Na primer, lahko uporabite createEmployee mutacijo za dodajanje novih podatkov o zaposlenih v zbirko podatkov MongoDB.
Priljubljenost GraphQL v skupnosti razvijalcev
GraphQL postaja vse bolj priljubljen v skupnosti razvijalcev kot alternativni pristop oblikovanja API-ja k priljubljeni arhitekturi REST.
To je posledica njegove zmožnosti zagotavljanja bolj prilagodljivega in učinkovitega načina za pridobivanje podatkov iz različnih virov, vse z ene same vstopne točke. S tem se izognete upravljanju več končnih točk za različne podatke, kar je pogosta težava pri arhitekturi REST API. Ta oblikovalska rešitev poenostavlja proces gradnje in upravljanja zalednih API-jev.