A GraphQL rugalmas alternatívát kínál a klasszikus REST megközelítéssel szemben, amikor API-t épít.
Az egyik legfontosabb tényező, amelyet egy alkalmazás tervezésekor figyelembe kell venni, a használandó API architektúra típusa. A hatékony API-tervezés kulcsfontosságú annak biztosításában, hogy az alkalmazások teljes életciklusuk során teljesítsenek.
A RESTful architektúra a legnépszerűbb megközelítés, de van egy jelentős hátránya: egy rögzített végpontstruktúra, amely előre meghatározott adatokat ad vissza. Ez a kialakítás nem hatékony kommunikációt eredményezhet.
Ezzel szemben a GraphQL – a REST alternatívája – nagyobb rugalmasságot kínál azáltal, hogy csak a szükséges adatokat kérheti le.
Mik azok a GraphQL API-k?
GraphQL egy lekérdezési nyelv, amellyel háttér API-kat (Application Programming Interfaces) írhat. nem úgy mint REST API-k, amelyeknek több végpontja van a különböző adatokhoz, a GraphQL API-knak csak egy belépési pontja van.
Az ügyfelek ezen az egyetlen belépési ponton adhatják meg lekérdezéseikben a számukra szükséges adatokat, így rugalmasabb és hatékonyabb csak a szükséges adatok lekérése.
Egyszerűen fogalmazva, a GraphQL API megvalósítja a GraphQL architektúrát, amelyet a GraphQL specifikációk. Ez a tervezés magában foglalja a séma, a lekérdezések és a mutációk meghatározását, amelyekkel az ügyfelek kapcsolatba léphetnek.
Íme a GraphQL API architektúra alapvető összetevőinek egyszerűsített lebontása:
- Séma: A séma az API által biztosított adatok és műveletek típusainak leírása. Alapvetően egy séma határozza meg a rendelkezésre álló adatok szerkezetét, valamint a lekérdezések és mutációk típusát, amelyeket az ügyfél végrehajthat az adatok módosításához.
- Lekérdezések: Az ügyfelek lekérdezések segítségével kérik le az adatokat az adatbázisból, megadva a szükséges adatok szerkezetét. Ezen túlmenően több lekérdezést is beágyazhatnak egyetlen HTTP-kérésbe, hogy több végpontról is lekérjék a kapcsolódó adatokat.
- Mutációk: A mutációk az adatbázisban lévő adatok módosítására szolgáló műveletek. Az ügyfelek mutációs kérelmeket küldhetnek adatok létrehozására, frissítésére vagy törlésére.
MongoDB adatbázis beállítása
A kezdéshez Hozzon létre egy MongoDB adatbázist. Alternatív megoldásként megteheti ingyenesen beállíthat egy MongoDB-fürtöt a felhőben.Az adatbázis beállítása után másolja ki a MongoDB adatbázis-kapcsolat URI karakterláncát.
A projekt kódja megtalálható benne GitHub adattár.
Hozzon létre egy Apollo szervert
Apollo szerver egy népszerű GraphQL-kiszolgáló megvalósítás, amely lehetővé teszi GraphQL API-k létrehozását JavaScript-környezetekben, beleértve a Node.js-t, az Express-t és egyebeket.
Hozzon létre egy könyvtárat egy új projekthez, és CD bele:
mkdir graphql-API-mongoDB
cd graphql-API-mongoDB
Ezután inicializáljon egy új Node.js projektet.
npm init -- igen
Ez a parancs létrehozza a package.json fájlt.
Telepítse a szükséges függőségeket
Futtassa a következő parancsot a csomagok telepítéséhez.
npm az Apollo-server graphql mongoose telepítése
Végül hozzon létre egy index.js fájlt a projekt gyökérkönyvtárában.
Állítsa be az Apollo szervert
Nyisd ki index.js és add hozzá az alábbi kódot:
const { ApolloServer } = igényelnek("apollo-szerver");
const mangúz = igényelnek('indiai menyét');
const typeDefs = igényelnek("./graphql/typeDefs");
const feloldók = igényelnek("./graphql/resolvers");const szerver = új ApolloServer({
typeDefs,
megoldók
});const MONGO_URI = 'mongodb://localhost: 27017';
indiai menyét
.connect (MONGO_URI, {
useNewUrlParser: igaz,
UseUnifiedTopology: igaz,
})
.akkor(() => {
konzol.log(`Db csatlakoztatva`);
Visszatérés server.listen({ kikötő: 5000 });
})
.akkor((res) => {
konzol.log(`A szerver a következő helyen fut ${res.url}`);
})
.fogás(téved => {
konzol.log (err.message);
});
Ez a kód inicializál egy helyi GraphQL szervert az Apollo Server könyvtár használatával. Ezután kapcsolatot létesít egy MongoDB adatbázissal a megadott kapcsolati URI-vel.
Figyelje meg, hogyan ad át a kód két argumentumot az ApolloServer új példányának: typeDefs és feloldók. Ezek meghatározzák az adattípusokat és a GraphQL API által végrehajtható műveleteket.
Miután létrejött a kapcsolat a MongoDB adatbázissal, a szerver elkezdi figyelni az 5000-es portot.
Határozza meg az adatmodellt
Hozzon létre egy új mappát a projektmappa gyökérkönyvtárában, és nevezze el modellek. Ebben a mappában hozzon létre új fájlneveket dataModel.js és add hozzá a következő kódot:
const {modell, séma} = igényelnek('indiai menyét');
const alkalmazottSéma = új Séma({
név: Húr,
osztály: Húr,
fizetés: Húr,
});
modult.exports = model('Munkavállaló', munkavállalóSchema);
Határozza meg a GraphQL sémát
A GraphQL séma határozza meg a GraphQL API segítségével lekérdezhető adatok szerkezetét. A séma felvázolja az API által futtatható lekérdezéseket és mutációkat is. Lekérdezéseket használhat adatok lekérésére, mutációkat pedig módosításukra.
A projekt gyökérkönyvtárában hozzon létre egy új mappát, és nevezze el graphql. Adjon hozzá két fájlt ehhez a mappához: typeDefs.js és solvers.js
Adja hozzá az alábbi kódot a typeDefs.js fájlhoz:
const {gql} = igényelnek("apollo-szerver");
const typeDefs = gql`
type Alkalmazott {
én csináltam!
név: Húr
osztály: Húr
fizetés: Húr
}
input EmployeeInput {
név: Húr
osztály: Húr
fizetés: Húr
}
írja be a Query {
getEmployee (azonosító: azonosító): alkalmazott számaVisszatérés Munkavállaló azonosítóval
alkalmazottak: [alkalmazott] #Visszatérés sor nak,-nek Alkalmazottak
}
típus mutáció {
createEmployee (employeeInput: EmployeeInput): Alkalmazott
updateEmployee (azonosító: azonosító, munkavállalóInput: EmployeeInput): Boolean
Employee törlése (azonosító: azonosító): Boolean
}
`;
modult.exports = typeDefs;
Ez a fenti kód a gql az apollo-server csomag által biztosított függvény GraphQL séma létrehozásához az alkalmazotti adatokhoz.
A séma négy fő elemből áll: adattípusok az alkalmazottak információihoz, bemeneti típusok, lekérdezések és mutációk, amelyeket az API végrehajthat.
Határozza meg a GraphQL API feloldóit
A feloldó egy GraphQL-függvény, amely meghatározza a továbbítandó adatokat, amikor egy ügyfél API-lekérdezést küld az adatok lekéréséhez. Lényegében az elsődleges szerepe, hogy a megadott adatforrásból lekérje a szükséges adatokat, és visszaküldje azokat az ügyfélnek.
Adja hozzá az alábbi kódot a solvers.js fájl a graphql mappát. A feloldókat ebben az esetben a Query és a Mutation objektumok határozzák meg.
A Query objektum két módszert határoz meg: alkalmazottak és getEmployee. Ezek a módszerek felelősek azért, hogy az ügyfél kérésére lekérjék az alkalmazottak adatait az adatbázisból.
const Alkalmazott = igényelnek("../models/employeesModel");// GraphQL-feloldók
const megoldók = {
Lekérdezés: {
alkalmazottak: async () => {
próbáld ki {
const alkalmazottak = várja Employee.find({});
Visszatérés alkalmazottak;
} fogás (hiba) {
konzol.error (hiba);
dobásújHiba("Nem sikerült lekérni az alkalmazottakat");
}
},
getEmployee: async (szülő, args) => {
próbáld ki {
const alkalmazott = várja Employee.findById (args.id);
Visszatérés munkavállaló;
} fogás (hiba) {
konzol.error (hiba);
dobásújHiba("Nem sikerült lekérni az alkalmazottat azonosító alapján");
}
},
},
A Mutation objektumnak három módszere van: CreateEmployee, updateEmployee, és törölje az alkalmazottat. Ezek a módszerek módosítják a MongoDB adatbázisban tárolt adatokat.
Mutáció: {
async createEmployee (_, { munkavállalóInput: { név, osztály, fizetés } }) {
const newEmployee = új Munkavállaló({
név: név,
osztály: osztály,
fizetés: fizetés
});const válasz = várja newEmployee.save();
konzol.log (newEmployee);Visszatérés {
id: válasz._id,
...válasz._doc
}
},async updateEmployee (_, {id, munkavállalóInput: {név, osztály, fizetés}}) {
const updatedEmployee = várja Employee.updateOne(
{ _id: azonosító },
{ név, osztály, fizetés }
);ha (!updatedEmployee) {
dobásújHiba(`Alkalmazott személyi igazolvánnyal: ${id} nem található`);
}Visszatérésigaz; // A frissítés sikerességét jelző logikai értéket ad vissza
},async deleteEmployee (_, {id}) {
const deletedEmployee = várja Employee.deleteOne({ _id: id });
ha (!deletedEmployee || deletedEmployee.deletedCount 0) {
dobásújHiba(`Alkalmazott személyi igazolvánnyal ${id} nem található`);
}Visszatérésigaz; // A törlés sikerességét jelző logikai értéket ad vissza
},
},
};
modult.exports = feloldók;
Végül futtassa ezt a parancsot a szerver felpörgetéséhez:
csomópont index.js
Miután létrehozta az adatbázis-kapcsolatot, a szerver az 5000-es porton indul el.
Tesztelheti a GraphQL API funkcionalitását, ha HTTP kéréseket küld a GraphQL játszótérről a böngészőjében.
Használhatja például a CreateEmployee mutáció új alkalmazotti adatok hozzáadásához a MongoDB adatbázisban.
GraphQL népszerűsége a fejlesztői közösségben
A GraphQL a népszerű REST architektúra alternatív API-tervezési megközelítéseként egyre nagyobb teret hódít a fejlesztői közösségben.
Ez annak köszönhető, hogy rugalmasabb és hatékonyabb módot tud biztosítani az adatok különböző forrásokból való lekérésére, mindezt egyetlen belépési pontról. Ezzel elkerülhető, hogy több végpontot kelljen kezelnie a különböző adatokhoz, ami gyakori probléma a REST API architektúrával. Ez a tervezési megoldás leegyszerűsíti a háttér API-k létrehozásának és kezelésének folyamatát.