REST API

REST API vs GraphQL

REST API vs GraphQL

TL; DR verzió

Az egyik korábbi bejegyzésben röviden megvitattuk, milyen a GitHub API v3 használata. Ezt a verziót úgy tervezték, hogy bármilyen más REST API-hoz hasonlóan interfész legyen. Minden erőforráshoz vannak végpontok, amelyekhez hozzáférni és / vagy módosítani kell. Minden felhasználónak, szervezetnek, minden adattárnak és így tovább vannak végpontjai. Például minden felhasználó API-végpontja a https: // api címen található.github.com / users / megpróbálhatja helyettesíteni a felhasználónevét a helyett és írja be az URL-t egy böngészőbe, hogy lássa, mire válaszol az API.

A GitHub API v4 viszont a GraphQL-t használja, ahol a QL jelentése Query Language. A GraphQL az API-k tervezésének új módja. Csakúgy, mint sok REST API-ként kínált webszolgáltatást, nem csak a GitHub által kínáltakat, sok olyan webszolgáltatás is létezik, amelyek lehetővé teszik, hogy a GraphQL-en keresztül kapcsolódjon velük.

A legnagyobb különbség, amelyet észrevesz a GraphQL és a REST API között, az, hogy a GraphQL egyetlen API-végpontot képes kezelni. A GitHub API v4 esetében ez a végpont a https: // api.github.com / graphql és ennyi. Nem kell aggódnia a hosszú karakterláncok csatolásával a gyökér URI végén, vagy további információkért meg kell adnia egy lekérdezési karakterlánc-paramétert. Egyszerűen elküld egy JSON-szerű argumentumot ennek az API-nak, és csak a szükséges dolgokat kéri, és egy JSON hasznos terhet kap vissza pontosan ugyanazokkal az információkkal, amelyeket kért. Nem kell foglalkoznia a nemkívánatos információk kiszűrésével, vagy a nagy válaszok miatt teljesítmény-rezsi miatt kell szenvednie.

Mi a REST API?

Nos, a REST a reprezentatív állapotátvitel, az API pedig az alkalmazásprogramozási felület. A REST API vagy egy „RESTful” API vált a legtöbb modern kliens-szerver alkalmazás mögött álló tervezési filozófiává. Az ötlet abból adódik, hogy el kell különíteni az alkalmazás különböző összetevőit, például az ügyféloldali felhasználói felületet és a szerveroldali logikát.

Tehát az ügyfél és a szerver közötti munkamenet általában hontalan. Miután a weboldal és a kapcsolódó szkriptek betöltődtek, folytathatja a műveletet velük, és amikor végrehajt egy műveletet (például megnyom egy küldési gombot), akkor küld egy küldési kérelmet az összes kontextusinformációval együtt, amelyre a webszervernek szüksége van a kérés feldolgozásához ( például felhasználónév, tokenek stb.). Az alkalmazás áttér az egyik állapotról a másikra, de nem szükséges állandó kapcsolat az ügyfél és a kiszolgáló között.

A REST korlátozások halmazát határozza meg az ügyfél és a kiszolgáló között, és a kommunikáció csak ezeken a korlátozásokon keresztül valósulhat meg. Például a REST HTTP felett általában a CRUD modellt használja, amely a Létrehozás, Olvasás, Frissítés és Törlés rövidítéseket jelenti, és az olyan HTTP módszerek, mint a POST, GET, PUT és DELETE, segítenek ezeknek a műveleteknek és ezeknek a műveleteknek a végrehajtásában. A régi behatolási technikák, például az SQL injekciók, nem jelentenek lehetőséget a szorosan megírt REST API-val (bár a REST nem biztonsági csodaszer).

A felhasználói felület fejlesztőinek is nagyon sokat segít! Mivel csak egy HTTP-kérésből érkezik, tipikus szövegfolyam (néha JSON formátumban van), könnyen megvalósíthat egy weboldalt a böngészőkhöz vagy egy alkalmazást (a kívánt nyelven), anélkül, hogy aggódna a szerveroldali architektúra miatt. Olvassa el az olyan szolgáltatások API-dokumentációját, mint a Reddit, a Twitter vagy a Facebook, és írhat bővítményeket nekik vagy külső ügyfeleknek az Ön által választott nyelven, mivel garantáltan garantálja, hogy az API viselkedése továbbra is ugyanaz lesz.

Ezzel szemben a szervert nem érdekli, hogy a kezelőfelület Go, Ruby vagy Python nyelven íródott-e. Legyen szó böngészőről, alkalmazásról vagy CLI-ről. Csak „látja” a kérést és megfelelően reagál.

Mi a GraphQL?

Mint bármi más a számítógépek világában, a REST API-k is nagyobbak és összetettebbek lettek, ugyanakkor az emberek gyorsabb és egyszerűbb módon akarták őket bevezetni és fogyasztani. Ezért a Facebook felvetette a GraphQL ötletét, majd később megnyitotta. A GraphQL QL jelentése Query Language.

A GraphQL lehetővé teszi az ügyfelek számára, hogy nagyon specifikus API-kéréseket tegyenek, ahelyett, hogy merev API-hívásokat végeznének előre meghatározott paraméterekkel és válaszokkal. Sokkal egyszerűbb, mert a szerver ezután pontosan azokkal az adatokkal válaszol, amelyeket Ön kért, semmi fölösleggel.

Vessen egy pillantást erre a REST kérésre és a hozzá tartozó válaszra. Ez a kérés csak a felhasználó nyilvános életrajzát hivatott megtekinteni.

Kérés: GET https: // api.github.com / users /
Válasz:

"login": "octocat",
"id": 583231,
"node_id": "MDQ6VXNlcjU4MzIzMQ ==",
"avatar_url": "https: // avatars3.githubusercontent.com / u / 583231?v = 4 ",
"gravatar_id": "",
"url": "https: // api.github.com / users / octocat ",
"html_url": "https: // github.com / octocat ",
"followers_url": "https: // api.github.com / users / octocat / followers ",
"following_url": "https: // api.github.com / users / octocat / követés / other_user ",
"gists_url": "https: // api.github.com / users / octocat / gists / gist_id ",
"starred_url": "https: // api.github.com / users / octocat / csillagozott / owner / repo ",
"előfizetések_url": "https: // api.github.com / users / octocat / subscriptions ",
"szervezetek_url": "https: // api.github.com / users / octocat / orgs ",
"repos_url": "https: // api.github.com / users / octocat / repos ",
"events_url": "https: // api.github.com / users / octocat / events / privacy ",
"kapott_események_url": "https: // api.github.com / users / octocat / receives_events ",
"type": "Felhasználó",
"site_admin": hamis,
"name": "Az Octocat",
"társaság": "GitHub",
"blog": "http: // www.github.com / blog ",
"hely": "San Francisco",
"email": null,
"bérelhető": null,
"bio": null,
"public_repos": 8,
"public_gists": 8,
"követők": 2455,
"következő": 9,
"created_at": "2011-01-25T18: 44: 36Z",
"updated_at": "2018-11-22T16: 00: 23Z"

Használtam az octocat felhasználónevet, de helyettesítheti az Ön által választott felhasználónévvel, és a cURL paranccsal megadhatja ezt a kérést a parancssorban vagy a Postman-ben, ha GUI-ra van szüksége. Bár a kérés egyszerű volt, gondoljon át minden további információra, amelyet ebből a válaszból kap. Ha millió ilyen felhasználó adatait dolgozná fel, és az összes felesleges adatot kiszűrné a használatával, az nem hatékony. Elpazarolja a sávszélességet, a memóriát és a számítást az összes millió kulcsérték-pár megszerzésében, tárolásában és kiszűrésében, amelyeket soha nem fog

A válasz felépítése szintén nem olyan, amit előzetesen tud. Ez a JSON válasz egyenértékű a Python szótárobjektumával vagy a JavaScript egy objektumával. Más végpontok olyan JSON-objektumokkal válaszolnak, amelyek beágyazott objektumokból, az objektumon belüli beágyazott listából vagy a JSON adattípusok tetszőleges kombinációiból állnak, és a részletek megszerzéséhez a dokumentációra kell hivatkoznia. A kérelem feldolgozása során ismernie kell ezt a formátumot, amely végpontról végpontra változik.

A GraphQL nem támaszkodik olyan HTTP igékre, mint a POST, GET, PUT és DELETE, hogy CRUD műveleteket hajtson végre a szerveren. Ehelyett csak egyetlen típusú HTTP kérés típus és endopint létezik az összes CRUD-hoz kapcsolódó művelethez. A GitHub esetében ez POST típusú kéréseket tartalmaz, csak egy végponttal: https: // api.github.com / graphql

POST kérésként magában hordozhat egy JSON-szerű szövegtestet, amelyen keresztül a GraphQL műveleteink lesznek. Ezek a műveletek tipea típusúak lehetnek lekérdezés ha csak annyit akar elolvasni néhány információt, vagy lehet a mutáció abban az esetben, ha az adatokat módosítani kell.

GraphQL API hívások kezdeményezéséhez használhatja a GitHub GraphQL explorerjét. Vessen egy pillantást erre a GraphQL-re lekérdezés ugyanolyan típusú adatok (a felhasználó nyilvános életrajza) beolvasására, mint a fentiekben a REST használatával.

Kérés: POST https: // api.github.com / graphql
lekérdezés
felhasználó (bejelentkezés: "ranvo")
bio


 
Válasz:
 

"adatok":
"felhasználó":
"bio": "Műszaki és tudományos rajongók. Mindenféle független dologgal foglalkozom
szerverek a kvantumfizikához.\ r \ nElőfordulva blogbejegyzéseket írok a fenti érdeklődési körökről."


Mint látható, a válasz csak abból áll, amit kért, ez a felhasználó életrajza. Kiválaszt egy adott felhasználót a felhasználónév átadásával (az én esetemben ez az ranvo), majd megkérdezi az adott felhasználó attribútumának értékét, ebben az esetben ez az attribútum bio. Az API-kiszolgáló megkeresi a pontos információkat, és ezzel válaszol, semmi mással.

A fordított oldalon a GraphQL azt is tenné, hogy egyetlen kérést küldene, és kivonja azokat az információkat, amelyek több kérést is igényeltek volna a hagyományos REST API-ban. Emlékezzünk arra, hogy az összes GraphQL-kérés csak egy API-végponthoz érkezik. Vegyük például azt a felhasználási esetet, amikor a GitHub API szervertől kell megkérdezni a felhasználó életrajzát és annak egyik SSH kulcsát. Két GET-kérésre lenne szükség.

REST kérések: GET https: // api.github.com //
GET https: // api.github.com //kulcsok
 
GraphQL kérés: POST https: // api.github.com / graphql /
 
lekérdezés
felhasználó (bejelentkezés: "ranvo")
bio
publicKeys (utolsó: 1)
élek
csomópont
kulcs





 
GraphQL válasz:
 

"adatok":
"felhasználó":
"bio": "Műszaki és tudományos rajongók. Mindenféle független dologgal foglalkozom
szerverek a kvantumfizikához.\ r \ nElőfordulva blogbejegyzéseket írok a fenti érdeklődési körökről.",
"publicKeys":
"élek": [

"csomópont":
"kulcs": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH31mVjRYdzeh8oD8jvaFpRuIgL65SwILyKpeGBUNGOT"


]



Vannak beágyazott objektumok, de ha megnézed a kérésedet, nagyjából megfelelnek a kérésednek, így megismerheted és bizonyos értelemben alakíthatod a kapott válasz szerkezetét .

Következtetés

A GraphQL saját tanulási görbével rendelkezik, amely nagyon meredek, vagy egyáltalán nem meredek attól függően, hogy kit kérdez. Objektív szempontból a következő tényeket fogalmazhatom meg Önnek. Rugalmas, amint azt fentebb látta, introspektív - vagyis lekérdezheti a GraphQL API-t magáról az API-ról. Még akkor is, ha nem az API-kiszolgálót fogja használni azzal, valószínű, hogy olyan API-val kell majd csatlakoznia, amely csak a GraphQL-t engedélyezi.

Itt többet megtudhat a technikájáról, és ha helyi munkaállomáson szeretne GraphQL API-hívásokat kezdeményezni, akkor használja a Graphiql-t.

Az X-Mouse Button Control segítségével az egér gombjait másképp alakíthatja át a különböző szoftvereknél
Lehet, hogy szüksége van egy eszközre, amely megváltoztathatja az egér vezérlését minden használt alkalmazással. Ebben az esetben kipróbálhatja az úgy...
Microsoft Sculpt Touch vezeték nélküli egér áttekintés
Nemrég olvastam a Microsoft Sculpt Touch vezeték nélküli egér és úgy döntött, hogy megveszi. Egy ideig használat után úgy döntöttem, hogy megosztom ve...
AppyMouse képernyős Trackpad és egérmutató a Windows táblagépekhez
A táblagép-felhasználók gyakran hiányolják az egérmutatót, különösen akkor, ha szokták használni a laptopokat. Az érintőképernyős okostelefonok és táb...