Anna sille REST: käytä GraphQL sovellusliittymillesi

API-arkkitehtuurin maailmassa REST on ollut hallitseva hallitsija vähintään kymmenen vuoden ajan. On mahdollista, että käytät REST API -sovellukseen rakennettuja ohjelmistoja useita kertoja päivässä puhelimessa, tietokoneessa tai muussa laitteessa. Ehkä olet jopa työskennellyt REST-sovellusliittymässä tai kirjoittanut itse! Huolimatta RESTin suosioista, sillä on kuitenkin joitain räikeitä virheitä.

Mikä on REST?

REST-sovellusliittymissä palvelin määrittelee tietyn resurssijoukon, jota asiakas voi pyytää, ja nämä resurssit määritetään yksilöivillä URL-osoitteilla. Esimerkiksi yleisen mikroblogialustan sovellusliittymässä, URL / users / 1 voi merkitä järjestelmän ensimmäistä käyttäjää, / users / 1 / posts voivat palauttaa kokoelman kaikista käyttäjän kirjoittamista viesteistä, ja / users / 1 / viestit / 327 voisi palauttaa yhden viestin. REST-toiminnolla on monia vivahteita ja hyvin dokumentoitu käyttäytymismääritelmä, mutta URL-pohjaiset resurssit peittävät perusidean. Viime kädessä on tärkeää, että palvelin määrittelee niiden tietojen rakenteen, joita asiakas voi pyytää.

Mitä vikaa RESTissä on?

Kuvittele, että työskentelet edellä mainitun Generic Microblogginator ™ -yrityksen kanssa mobiilisovellusten kehittäjänä. Sinulle annetaan tehtävä kirjoittaa matkapuhelimenäkymä käyttäjän profiilille, jonka on näytettävä käyttäjän tiedot ja lueteltava hänen viestinsä. Tämä ei ole liian vaikeaa; paina vain / users / {id} -päätepistettä saadaksesi entisen ja / users / {id} / viestit saadaksesi jälkimmäisen.

Sinä lähetät mobiilinäkymän ja odotat, että kaikki asiakaspalautteet ja sovellusarvostelut ovat ”unohdettuja”. Ensi viikolla, kun kaikki arvostelut on saatu, saat uuden vaatimuksen. Että Muu Microblogger ™ näyttää pari kommenttia jokaisesta viestistä profiilinäkymässä. Miksi emme myöskään tee niin? Onneksi sovellusliittymälläsi on jo päätepiste blogi-viestin kommenttien saamiseksi: / käyttäjät / {id} / viestit / {id} / kommentit. Voit muuttaa näkymää osuaksesi kyseiseen päätepisteeseen jokaisesta käyttäjän profiilisivulla näkyvästä viestistä, ja olet valmis.

Mutta nyt sovelluksesi on hidas, ja tämä johtaa meidät REST-sovellusliittymien suurimpiin ongelmiin:

Liian monta HTTP-pyyntöä

Tarkastellaan sitä: asiakassovellukset pysyvät harvoin yksinkertaisina. Useammin kuin ei, jokaisella asiakkaalla on melko erityiset vaatimukset, jotka heijastavat mitä tietoja he tarvitsevat järjestelmästäsi. Jos tarjoat vain yhden ehdottoman tavan pyytää tietoja, saat asiakkaita, jotka yrittävät lyödä romboiditapin timantin muotoiseen reikään.

Edellisessä esimerkissä mobiilisovelluksemme hidastuu ja hidastuu jokaisen käyttäjän kirjoittaman viestin kanssa. Jos käyttäjän profiilissa on lueteltu 20 viestiä, lähetämme 22 sovellusliittymäpyyntöä. Yksi tiedot käyttäjästä, toinen heidän viestiluettelostaan ​​ja sitten kaksikymmentä pyyntöä saada kunkin viestin kommentit.

Kun lisäät uusia komponentteja mobiilisovelluksen käyttöliittymään, tämä ongelma pahenee. Jokaisen uuden käyttöliittymäkomponentin mukana tulee uusi API-kutsu tai uusi räätälöinti olemassa oleviin API-päätepisteisiin. Voit sijoittaa objekteja toisiinsa välttääksesi ylimääräisiä API-kutsuja, mutta koska näkymästä tulee monimutkaisempi, aloitat väistämättä merkityksettömien tietojen pesämisen. Päädyt loppupisteisiin, jotka eivät kuvaa yhtä resurssia, vaan sen sijaan näkymää useista lähteistä. Nyt sovellusliittymäsi ei enää näytä niin RESTful.

Vielä pahempaa on, että joudut tukemaan kaikkia vanhoja päätepisteitä niin kauan kuin siellä on vanhoja versioita asiakkaista, jotta et riski rikkoa näitä asiakkaita. Tämä johtaa toiseen suureen REST-ongelmaan:

REST-sovellusliittymien ”versiointi” on tuskaa

REST-sovellusliittymien vastausten rakenne on tärkeä. Asiakkaat rakentavat itsensä tiedon ympärille, että jokaisella resurssilla on tietty rakenne. Kun Generic Microblogginator ™ julkaisi ensimmäisen kerran sovellusliittymänsä, vastaus yksittäisen viestin saamiseen näytti seuraavalta:

Jonkin ajan kuluttua päätät, että on olemassa joitain asioita, joita haluat parantaa viestin rakenteessa sovellusliittymässä. Viestit saavat luokkia, joten sinun on lisättävä ne uudeksi kentäksi. Olet saanut myös palautetta siitä, että julkaistun lehden muoto ei ole kovin ystävällinen. JavaScript-asiakkaat voivat jäsentää sen kunnossa, mutta mieluummin mikä tahansa työkalu pystyy jäsentämään aikaleimat helposti, joten päätät muuttaa sen ISO-8601-muotoon. Kun kaikki on sanottu ja tehty, haluat uuden rakenteen näyttävän tältä:

Hyvältä näyttää! Valitettavasti yksi muutoksista rikkoa kaikki nykyiset asiakkaasi. Jokainen asiakas odottaa julkaistun_at olevan vähemmän ystävällinen muoto, joten he yrittävät jäsentää sen. Jos haluat päivittää kentän tai poistaa sen, sinun on versioitava sovellusliittymäsi (onko kyse URL-osoitteen tai HTTP-otsikon kautta) ja yritettävä saamaan asiakkaat päivittämään. On epätodennäköistä, että sait jokaisen asiakkaan päivittämään, joten sinulla on kaksi vaihtoehtoa:

  1. Ole hyvä ja poista vanhoja asiakasversioita (mukaan lukien oma sovelluksesi)
  2. Tue sovellusliittymäsi vanhoja versioita siihen päivään asti, kun yrityksesi päättää ilmoittaa uuden luvun uskomatonta matkaansa.

Helpoin tehtävä on yksinkertaisesti jättää vanha koodi yksin, mikä tarkoittaa yhä useamman API-version version kasaamista vanhojen päälle.

Haastaja lähestyy

Anna GraphQL, Facebookin kirjoittama tekniikka. Facebook oli edessään suurissa ongelmissa heidän mobiilisovellustensa tietokantaan. Heidän mobiilisovelluksensa olivat aiemmin kääreitä web-näkymien ympärillä, ja koska mobiilisovellusten monimutkaisuus lisääntyi, he alkoivat kärsiä suorituskykyongelmista ja usein kaatumisista. Facebook kääntyi natiivien sovellusten kirjoittamiseen ja huomasi tarvitsevansa uuden sovellusliittymän hakeakseen tietoja alkuperäisistä näkymistä. He arvioivat REST ja muita vaihtoehtoja, mutta ottaen huomioon edellä kuvatut ongelmat käyttivät lopulta tilaisuutta tuottaa jotain todella uutta.

Mikä on GraphQL?

GraphQL on, kuten nimestä voi päätellä, kyselykieli. Se on myös täydellinen sovellusliittymille. Sen avulla voit määritellä tietosi täysimittaisella tyyppisellä järjestelmällä, jolloin muodostuu kaavio, joka itse dokumentoituu. Se antaa asiakkaille myös täyden hallinnan pyydettyihin tietoihin.

Liian monta HTTP-pyyntöä? Entä yksi HTTP-pyyntö?

GraphQL: n avulla asiakkaat voivat saada kaikki tarvitsemansa tiedot näkymän tuottamiseksi vain yhdellä pyynnöllä. Edellisellä profiilisivumme esimerkillä asiakkaan on lähetettävä yksi pyyntö saadaksesi käyttäjän tietoja, yksi pyyntö saada käyttäjän viestit ja sitten toinen pyyntö jokaisesta viestistä saadaksesi muutama kommentti. GraphQL: n avulla asiakas voi saada kaikki yllä olevat tiedot yhdellä pyynnöllä:

Puomi! Tähän on muita etuja, lukuun ottamatta sitä, että siirryimme 22 HTTP-pyynnöstä yhteen. Käyttäjälläsi voi esimerkiksi olla muita tietoja liitteenä. Ehkä paljastat käyttäjän aikataulun, kun käyttäjä kirjautui. Ehkä toinen asiakas ei välitä viestin luokista. Jos asiakkaan ei tarvitse kysyä tietoja, niin palvelin ei myöskään. Joten kun asiakas tallentaa, voit säästää myös yksinkertaistamalla omia tietokantakyselyjäsi.

Versiointi? Vanhenna vain!

Kuten (useimmissa) REST-sovellusliittymissä, voit lisätä kenttiä GraphQL-tyyppeihin ilman pelkoa. Toimintojen poistamiseksi GraphQL sisältää ominaisuuksien poistot. Sen sijaan, että poistat kentän kokonaan ja hajotat asiakkaita, voit julistaa kentän vanhentuneeksi ja piilottaa sen työkaluilta sen vanhetessa.

Asiakirjat: tuskin tarvitse huolehtia siitä

Anna minun olla hetkeksi todellinen täällä: Voin laskea kuinka monta kertaa olen käyttänyt hyvin dokumentoitua sovellusliittymää toisaalta. Usein sovellusliittymät ovat dokumentoimattomia tai huonosti dokumentoituja. GraphQL: n avulla skeema on käytännössä itse dokumentoiva. Ainoa mitä sinun on tehtävä, on antaa tyyppiäsi ja kenttiäsi kuvaukset tarvittaessa, ja tämä tapahtuu itse koodissa. Asiakkaat voivat antaa erityisiä GraphQL-kyselyitä tutkiaksesi sovelluksesi kaavaa ja tietäen yhdessä kyselyssä kaikki pyydettävät tiedot, mitä siihen kutsutaan ja mitä se kuvaa. Kehittäjät voivat käyttää myös tähän itsehavaintoon rakennettuja työkaluja, kuten GraphiQL, jonka avulla asiakkaat voivat testata kyselynsä reaaliaikaisen syntaksin korostamisen ja virheiden havaitsemisen avulla.

Aloita GraphQL

Onko sinua myyty tarpeeksi, jotta voit kokeilla GraphQL: tä? Matkallesi pääsemiseksi on paljon resursseja:

  • Tutustu GraphQL: n viralliseen verkkosivustoon, jossa on dokumentaatio ja esimerkkejä
  • Pelaa ympäri esimerkillä, Star Wars GraphQL API
  • Toimiva GraphQL-eritelmä, jos olet ilkeä rakeinen

Seuraan tätä viestiä vielä yhden kanssa, jossa luomme yhdessä pienen GraphQL-sovellusliittymän, joten pysy kuulolla! Minulla on ollut valtava ilo työskennellä GraphQL: n kanssa GitHubissa, ja kokemukseni ansiosta uskon koko sydämestäni, että se on tulevaisuuden API-työkalu.