Számos nyílt forráskódú építészeti szabvány létezik az alkalmazások építésére és terjesztésére. A REST (Representational State Transfer), a SOAP (Simple Object Access Protocol), az RPC (Remote Procedural Call) és a GraphQL API-k a legnépszerűbbek.
A RESTful API-k a leggyakrabban használt API architektúra szabványok. Ha összetett RESTful API-kat írt sok végponttal, akkor valószínűleg rájött, milyen bonyolultak is lehetnek. Ez különösen igaz, ha csak csekély eltérések vannak a végpontok között.
Problémák adódhatnak az adatlekéréssel kapcsolatban is, mivel a RESTful API-k nem elég rugalmasak bizonyos adatok kiválasztásához. A GraphQL megoldja a RESTful API-k ezeket a problémáit.
Mi az a GraphQL?
A GraphQL (Graph Query Language) egy lekérdezési nyelv és futási környezet API-k építéséhez. A sok végponttal rendelkező REST API-kkal ellentétben a GraphQL API-knak egy belépési pontja van. Konkrét adatokat kérhet le, ha leírja azokat a lekérdezésekben.
A GraphQL specifikáció meghatározza a lekérdezési nyelvet és a GraphQL szerverek működését. GraphQL API-kat készíthet és használhat kiszolgálóoldali nyelveken a Pythontól a
Javascript, és minden olyan nyelv, amely támogatja a HTTP-t.A Meta 2012-ben építette a GraphQL-t a REST alternatívájaként a HTTP-n alapuló építéshez. 2015-ben kiadták a GraphQL-t nyílt forráskódú szabványként. Ma a GraphQL alapítvány felügyeli a GraphQL specifikáció fejlesztését.
A GraphQL meglehetősen új, alacsony elterjedtséggel, és rejtett költségekkel jár a használata. A GraphQL API-k felépítése szükségtelenül bonyolult lehet, különösen a néhány végponttal rendelkező kis projektek esetében.
Ezenkívül az összes GraphQL-kérés végül 200-as állapotkódot ad vissza, függetlenül a kérés állapotától.
Hogyan működik a GraphQL?
nem úgy mint REST, amely erőforrás-orientált, a GraphQL megköveteli, hogy az adatokra grafikonként gondoljon, hogy interakcióba lépjen az adatokkal. Megadhatja az adatok szerkezetét, és a specifikáció robusztus lekérdezési felületet biztosít az API-val HTTP-n keresztüli interakcióhoz. Különféle funkciókat használhat, attól függően GraphQL csomag vagy könyvtár a használatát választod.
A GraphQL sémák olyan objektumtípusokat tartalmaznak, amelyek meghatározzák a kérhető objektumot és annak elérhető mezőit. API-lekérdezések és mutációk esetén a GraphQL csomag érvényesíti a lekérdezéseket és végrehajtja a lekérdezéseket a megadott kezelő függvények (feloldók) alapján.
Miért érdemes GraphQL-t használni?
A REST egy könnyen használható szabvány, és a legtöbb programozási nyelv rendelkezik eszközökkel a RESTful API-k gyors létrehozásához. A RESTful API-k létrehozásával és fogyasztásával azonban számos probléma adódik.
Íme néhány probléma a REST-tel kapcsolatban, amelyek miatt a fejlesztők a GraphQL-t részesítik előnyben bizonyos használati esetekben.
Nem hatékony adatlekérés
A RESTful API-k a végpont specifikációi alapján továbbítják az adatokat. Nem elég rugalmasak ahhoz, hogy a végpont kezelő funkciójában keményen kódolt adatokon túlmenően is lekérjenek adatokat.
Tegyük fel, hogy egy végpont hívás közbeni adatok listáját adja vissza, és értékeket vagy feltételeket kell megadnia a mezőkhöz. Ebben az esetben a fejlesztőnek létre kell hoznia egy végpontot, és meg kell határoznia az üzleti logikát az adatok visszaküldéséhez. Az értékes erőforrást manuálisan is elemezheti, ami végül több időt vesz igénybe.
A GraphQL megoldja a nem hatékony adatlekérést, mivel lekérdezheti az API-kat, hogy a feltételek és specifikációk alapján rugalmasan adjanak vissza adatokat.
A GraphQL API-k interaktívak; könnyen, olvasható szintaxisban megadhatja a lekérni kívánt adatokat.
{
felhasználó (ahol: {age: {_eq: "89"}}) {
név
iskola(ahol: {élő: {_eq: true}}) {
bio
állampolgárság
}
}
}
A fenti GraphQL lekérdezés a felhasználó séma olyan bejegyzésekhez, ahol a kor mező a 89. A lekérdezésben van egy beágyazott lekérdezés azokhoz a bejegyzésekhez, ahol a élő mező értékeli igaz. Visszaadja a név, életrajz és nemzetiség mezőket a sémából.
Gyors fejlesztés
A GraphQL API-k létrehozása és felhasználása könnyebb, mint a REST használata, különösen a projekt méretének növekedésével. A fejlesztési szakaszban nem kell annyi útvonalat és kezelőfunkciót kifejlesztenie, mint a RESTful API-k fejlesztésekor. A GraphQL API-k használata nem olyan fárasztó, mint a RESTful API-k használata.
A REST-ben a különböző végpontok különböző erőforrásokhoz biztosítanak hozzáférést, ellentétben a GraphQL-lel, ahol egyetlen végpont van. Ez rugalmasságot és teljesítményt eredményez, és a lekérdezések különböző feloldó függvényeket hívhatnak meg.
A GraphQL sémadefiníciós nyelv
A GraphQL sémadefiníciós nyelv (SDL) határozza meg a GraphQL szolgáltatások sémáit.
A GraphQL SDL szintaxisa könnyen olvasható és érthető. Megadhatja a séma szerkezetét egy fájlban a .graphql vagy .graphqls kiterjesztés.
típus emberi {
név: Húr!
kor: Int!
}input AddHuman {
név: Húr!
kor: Int!
}típus mutáció {
CreateHuman (bemenet: AddHuman!): Ember!
DeleteHuman (azonosító: Int!): Húr!
UpdateHuman (azonosító: Int!): Húr!
}
típus Lekérdezés {
GetHuman (azonosító: Int!): Ember!
GetHumans: [Emberi!]!
}
A fenti GraphQL kód egy GraphQL API sémája, amely meghatározza a kérések API struktúráját. A séma meghatározza az API CRUD funkcióit.
A kliens oldalon a séma felépítése és a kliens adatai vagy művelete alapján a kliens végrehajthat egy lekérdezés (GET vagy DELETE a REST-ben) vagy a mutáció (PUT vagy POST).
Íme egy példa a Emberi séma.
query Human {
név
kor
}
A fenti lekérdezés az emberi sémát adja vissza név és kor terepi adatok.
A GraphQL mutációk szintaxisa meglehetősen eltérő a lekérdezésekhez képest. Íme egy példa mutációs műveletre a Emberi séma.
mutáció {
CreateHuman (bemenet:{ név:"Férfi", életkor: 1000000000000000,}) {
név
kor
}
}
A mutációs kód bemenet név és kor mezőket az ügyfélnek, és visszaadja a mezőkből származó adatokat.
Szüksége lesz egy adattárra a kitartás érdekében, amikor a GraphQL API-t építi. A REST-hez és a legtöbb HTTP-alapú webarchitektúrához hasonlóan a GraphQL is állapot nélküli, és bármilyen adattárat vagy adatbázist használhat az alkalmazáshoz.
GraphQL API készítése
A GraphQL egy specifikáció, és a GraphQL-t a legnépszerűbb szerveroldali nyelveken is elkészítheti. Meg kell találnia egy könyvtárat a projekthez szükséges funkciókkal.
GraphQL könyvtár kiválasztásakor olyan funkciókban gazdag könyvtárat szeretne használni, amely támogatja az összes GraphQL típust és műveletet. A legtöbb könyvtár vagy séma-első, vagy kód-első megközelítést alkalmaz. Az előbbiben egy GraphQL sémát definiál, a könyvtár pedig feloldókat és sablonkódot állít elő. Utóbbi esetében séma meghatározása nélkül keményen kódolja a feloldókat.
A GraphQL-t elfogadják
A GraphQL kezdete óta a fejlesztők és a vállalatok eszközöket adtak ki a használat egyszerűsítésére. Ezek csökkenthetik a kisebb és közepes projektek fejlesztési idejét.
További információért tekintse meg a nyílt forráskódú GraphQL klienseket, a GraphQL dokumentációját és specifikációit.