window.pipedriveLeadboosterConfig = { base: leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on juba olemas') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() GraphQL: tootmises saadud õppetunnid - The Codest
The Codest
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Tööstusharud
    • Fintech & pangandus
    • E-commerce
    • Adtech
    • Healthtech
    • Tootmine
    • Logistika
    • Autotööstus
    • IOT
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
Tagasi nool TAGASI
2020-03-26
Tarkvaraarendus

GraphQL: tootmises saadud õppetunnid

Pawel Wal

See on 2020. Teie meeskond kaldub üha enam ühe lehekülje rakenduste ehitamise poole või vähemalt lisab rikkalikke komponente tavalistesse mitme lehekülje rakendustesse. [GraphQL](https://graphql.org/) on nüüd [üle kahe aasta vana](https://en.wikipedia.org/wiki/GraphQL), mida JavaScript ökosüsteemi standardite kohaselt võib pidada küpseks. Me olime veidi seiklushimulised, nii et loobusime tavalistest JSON APIdest ja sukeldusime otse sisse - siin on see, mida me õppisime.

See on 2020. Teie meeskond kaldub üha enam ühe lehekülje rakenduste ehitamise poole või vähemalt sisaldab rikkalikke komponente tavaliste mitme lehekülje rakenduste sees. [GraphQL](https://graphql.org/) on nüüdseks [üle kahe aasta vana](https://en.wikipedia.org/wiki/GraphQL), mis poolt JavaScript ökosüsteemi standardeid võib pidada küpseks. Me olime veidi seiklushimulised, nii et loobusime tavapärastest JSON APIdest ja sukeldusime otse sisse - siin on see, mida me õppisime.

Teil on vaja GraphQL-serverit

Enamikus raamistikes, mida kasutatakse veebiarendus, on vahendid JSON API loomiseks juba olemas. Saate luua marsruudi struktuuri ja lihtsalt vastu võtta mõned GET- ja POST-saated, seejärel väljastada JSON-vastuse. Ruby on Rails-l on isegi spetsiaalne projekt seadistamise lüliti, mis loobub tavalisest HTML-redigeerimisest ja paneb selle asemele kindla aluse APIdele. Sellest järeldub, et oskuslik arendaja, kes kasutab kaasaegseid vahendeid, saab backend'i üles keerata sõna otseses mõttes minutitega.

Mitte nii GraphQLi puhul. Kuigi on olemas serverite raamatukogud paljud keeled, siis tuleb teil ikkagi kohe algusest peale kiirustasu maksta - lihtsalt sellepärast, et te peate välja selgitama, mis on teie ökosüsteemi jaoks õige. Isiklikumalt öeldes ei meeldi mulle ka mõiste "server", mida kasutatakse projektile kasutusele võetava raamatukogu kirjeldamiseks.

On ainult üks lõpp-punkt

Aastate jooksul oleme harjunud konkreetse viisiga, kuidas API struktuurist mõelda. Kõige elementaarsemal tasemel järgisime lihtsalt REST-tavasid. See tähendas, et meie rakenduses loodi mitu lõpp-punkti iga loogilise mudeli kohta. See on struktuur, mida on lihtne mõista nii API autorite kui ka tarbijate jaoks. Samuti tekitab see hästi piiritletud meetodeid backendis, mis teeb arutluse üle kood sama lihtne kui API enda kohta. Seda struktuuri on ka lihtne nimetada, nt. API versioonimine.

GraphQL kasutab ainult ühte lõpp-punkti, tavaliselt /graphql. Iga teie API-le esitatav taotlus saabub POST-päringuna sellesse lõpp-punkti ja sealt edasi on GraphQL-serveri ülesanne välja selgitada, mida klient soovib, ja vastata sellele asjakohaselt.

Esmapilgul tundub see kohmakas: kujutage ette, et proovite teha kõike JSON API-d ühe lõpp-punktiga! Siiski hakkab see varsti mõttekaks muutuma, kui teie API küpseb ja mõned asjad asenduvad teistega. Deprecation klassikalistes API-des toimub tavaliselt nimeruumi tasandil, liikudes alates v1 aadressile v2. GraphQL võimaldab palju rohkem kontrolli, kuni ühe välja kaotamiseni. Kujutage ette, et saate REST API tarbijale öelda, et te ei soovi, et nad kasutaksid nimi valdkonnas ja kasutada fancy_name selle asemel! Selgub, et see, mis alguses tundus kohmakana, on tegelikult üks parimaid omadusi.

Kõik on trükitud

JSONis ei ole tegelikult palju tüübistamise võimalusi. Seal on stringid, numbrid, massiivid ja objektid. Peale selle ei ole teil õnne. Seevastu GraphQLis algab ja lõpeb kõik tüüpidega, sest isegi juur Query ja Mutation on just seda - tüübid. GraphQL DSL sunnib tüübikontrolli nii serveris kui ka kliendis, vältides igasuguseid ebameeldivaid üllatusi.

See on väga oluline, eriti kuna erihalduspiirkondi kontrollitakse üha sagedamini ise, kas siis TypeScript või alternatiivide, nagu Flow, abil. GraphQL muudab keeruliste ja liitetüüpide kasutuselevõtu vaikeväärtuste peal lihtsaks ning see muutub arendajatele nii backendis kui ka frontendis kiiresti teiseks.

Loe edasi: JavaScript testimine... koos Ruby'ga?!

Dokumendid on sisseehitatud

Klassikalise JSON API puhul võib dokumentatsioon olla tagantjärele. Ja isegi kui see ei ole, on palju meetodeid, mille vahel valida. Kas me kasutame mõnda skeemi nagu OpenAPI? Kas me siis teisendame selle inimesele loetavaks tööriistadega nagu Swagger? Või visandame lihtsalt terve hunniku Markdown-faile kuhugi? Kuigi see probleem on mitu korda lahendatud, nõuab see ikkagi meeskonnalt teadlikku mõtlemist ja pingutust - kõigepealt dokumentide koostamiseks, seejärel nende ajakohastamiseks ja levitamiseks. See on veelgi keerulisem probleem, kui API-l on mitu jaotist, millele on juurdepääs ainult nt teatud kasutajarollidel.

GraphQLis on dokumentatsioon esimese klassi kodanik, kuna enamik servereid võimaldab oma tüüpide ja taotluste dokumenteerimist kohapeal. Alates 2018. aasta algusest on GraphQL Schema Definition Language tehtud ametliku spetsifikatsiooni osaks, nii et GraphQL API dokumenteerimiseks on täpselt üks viis. Samuti kuna GraphQL võimaldab defineerida graafi teatud osade nähtavust, siis need kasutajad, kes ei tohiks, ei näe automaatselt doktorit selle kohta, millele nad ei pääse ligi. Selle otsuse eest hoolitsemine ja selged suunised on olnud meeskonnale suur õnnistus.

On ainult kahte liiki meetmeid

Erinevalt HTTP GET, POST, PUT, PATCH ja DELETE on GraphQLis ainult kahte tüüpi tegevusi: Päringud ja mutatsioonid. Peamine erinevus seisneb selles, et Mutations võib muuta süsteemi olekut ja muudab seda, Queries aga ainult passiivselt andmeid välja loeb.

Ma tunnistan, et olen selle kohta ikka veel ebalevalt meelestatud. Mulle meeldib, et HTTP-s on hulgaliselt verbe, mis võimaldavad ressurssidega suhelda ja kasutada täpselt õiget tööriista. GraphQL lihtsustab nende karvaste juhtumite lahendamist, kus mõni HTTP-verbidest ei sobinud täpselt, kuid toob kaasa karistuse, et tuleb mõelda, mida konkreetne mutatsioon tegelikult mõjutab. Samuti võib märkida, et kuna puudub tegelikult sisseehitatud standardne nimetamiskonventsioon, peate koostama sisemised stiilijuhendid või riskima ebajärjekindla segaduse loomisega.

Sa pead üsna palju klienti

REST API-dega suhtlemine üle HTTP on vanilla JavaScripts väga lihtne, veelgi enam, kui kasutada kaasaegset Tooge API. Seevastu GraphQLi puhul soovite kasutada kliendikirjastikku, kui soovite tõesti korralikku jõudlust. GraphQL APIga ei ole võimatu suhelda, kasutades lihtsalt vanilla JavaScript - tegemist on ju lihtsalt POST päringutega. Kuid lihtsalt pikaajaliste veebitehnoloogiate, nagu päringute vahemälu kasutamine tavaliste API-kutsete puhul ei toimi, kuna POST-päringud ei ole üldiselt vahemällu salvestatud.

Iga mõistlik GraphQL-klient rakendab kliendipoolset tulemuste vahemälumehhanismi ja palju muid funktsioone. Tänu kõigile nendele valikutele on GraphQL-kliendi konfiguratsiooni käsitsi keeramine algtasemel täiesti uimastav ülesanne. GraphQL-iga alustades soovitan ma eriti pilk peale visata Apollo-Boost kuna see on varustatud väga mõistlike vaikimisi seadistustega.

Klient valib andmed

Me kõik oleme olnud selles olukorras: me tõmbame API-st välja andmete nimekirja ja sellest puudub mõni oluline väli seotud mudeli kohta. Seejärel rakendame N+1 päringut hõlmava häkkimise, samal ajal nurisedes backend-arendajate üle, kes kiirelt selle lisavad. Hästi rakendatud GraphQL API puhul see tavaliselt nii ei ole, sest me saame lihtsalt süveneda andmetesse nii sügavale, kui me tahame. Kas on vaja näha kliendi aadressi tellimuse kohta selles partiis? Pole probleem - vähemalt teoreetiliselt, mis viib meid kenasti edasi...

Keerukust on raskem ette näha

GraphQL-i kujundamisel back-end'i poolelt võib olla raske mõelda, kui sügavale klient saab graafi süveneda. Graafi kasutamise instrumenteerimiseks ja jälgimiseks on palju võimalusi ning pärast seda, kui olete lasknud oma front-end kolleegidel mõnda aega mängida, võite hakata nägema, et teie andmepoes tehakse üsna fantaasiarikkaid päringuid. REST API puhul on seda lihtsam kontrollida, kuna saate hõlpsasti öelda, millises ulatuses andmeid ühe päringuga vaadatakse. Tihtipeale võib see vahelejäänud keerukus teid kõvasti hammustada, kui te toodangule vabastate. Paljudel juhtudel ei ole ka ilmne, kuidas sellest enda jaoks kaevatud august pääseda.

Nummerdatud leheküljed on tõesti raske

See on tegelikult keelega seotud nurinat. Kindlasti on tunda, et GraphQL on loodud Facebooki juures ja Facebooki jaoks, kui vaadata, kuidas selle ette nähtud lehekülgede loomise mehhanism töötab. Niinimetatud ühendused on põhimõtteliselt lõputud graafi servade voogud, millel navigeerimine toimub klassikaliste lehekülgede asemel kursorite abil. Kuigi on lihtne mõista, kuidas see sobib Facebooki stiilis lõputu postituste vooguga, on teil palju raskem, kui soovite korralikult liigendatud nimekirja, kus on võimalik minna näiteks leheküljele 42. Loomulikult on võimalusi selle vältimiseks, kuid see ongi see, mida nad on - vältimisvõimalused.

Kas me teeksime seda uuesti?

Kõigi eespool loetletud gripes ja erinevuste puhul arvate ilmselt, et me käsitleme GraphQL-i kui hapuks muutunud eksperimenti ja läksime otse tagasi REST API-de juurde. See ei ole tõsi. Kui üldse, siis me töötame selle nimel, et GraphQLi laialdasemalt kogu organisatsiooni projektides kasutada. See on suurepärane tehnoloogia, mis on muutnud meie töö lihtsamaks ja paremaks. Me investeerisime siiski esialgu GraphQL-i, ilma et oleksime täielikult aru saanud, milliseid kasvuvalu me läbi elame.

Kui te arvate, et GraphQL võib olla teie jaoks õige, siis julgustan teid seda tegema. Andke endale piisavalt aega ja ruumi ohutuks ebaõnnestumiseks, ja te saate kasu juba varsti!

Loe ka:

– Kuidas tõhusalt juhtida kaugarendajaid? Juhend CTO-le

– Python vs. Ruby? Millist tehnoloogiat peaksite tootearenduses kasutama?

– Kiire juhend oma turu loomiseks ja arendamiseks. Mida tasub teada?

Seotud artiklid

Tarkvaraarendus

Tulevikukindlate veebirakenduste loomine: The Codest ekspertide meeskonna ülevaade

Avastage, kuidas The Codest paistab skaleeritavate, interaktiivsete veebirakenduste loomisel silma tipptehnoloogiatega, mis pakuvad sujuvat kasutajakogemust kõigil platvormidel. Saate teada, kuidas meie eksperditeadmised aitavad kaasa digitaalsele ümberkujundamisele ja äritegevusele...

THECODEST
Tarkvaraarendus

Top 10 Lätis asuvat tarkvaraarendusettevõtet

Tutvu Läti parimate tarkvaraarendusettevõtete ja nende innovaatiliste lahendustega meie viimases artiklis. Avastage, kuidas need tehnoloogiajuhid saavad aidata teie äri edendada.

thecodest
Enterprise & Scaleups lahendused

Java tarkvaraarenduse põhitõed: A Guide to Outsourcing Successfully

Tutvuge selle olulise juhendiga, kuidas edukalt outsourcing Java tarkvara arendada, et suurendada tõhusust, pääseda ligi eksperditeadmistele ja edendada projekti edu The Codest abil.

thecodest
Tarkvaraarendus

Ülim juhend Poola allhanke kohta

outsourcing kasv Poolas on tingitud majanduslikust, hariduslikust ja tehnoloogilisest arengust, mis soodustab IT kasvu ja ettevõtlussõbralikku kliimat.

TheCodest
Enterprise & Scaleups lahendused

Täielik juhend IT-auditi vahendite ja tehnikate kohta

IT-auditid tagavad turvalised, tõhusad ja nõuetele vastavad süsteemid. Lisateavet nende tähtsuse kohta leiate kogu artiklist.

The Codest
Jakub Jakubowicz CTO & kaasasutajad

Tellige meie teadmistebaas ja jääge kursis IT-sektori eksperditeadmistega.

    Meie kohta

    The Codest - rahvusvaheline tarkvaraarendusettevõte, mille tehnoloogiakeskused asuvad Poolas.

    Ühendkuningriik - peakorter

    • Büroo 303B, 182-184 High Street North E6 2JA
      London, Inglismaa

    Poola - kohalikud tehnoloogiakeskused

    • Fabryczna büroopark, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varssavi, Poola

      The Codest

    • Kodu
    • Meie kohta
    • Teenused
    • Case Studies
    • Tea kuidas
    • Karjäärivõimalused
    • Sõnastik

      Teenused

    • See nõuandev
    • Tarkvaraarendus
    • Backend arendus
    • Frontend arendus
    • Staff Augmentation
    • Backend arendajad
    • Pilveinsenerid
    • Andmeinsenerid
    • Muud
    • QA insenerid

      Ressursid

    • Faktid ja müüdid koostööst välise tarkvaraarenduspartneriga
    • USAst Euroopasse: Miks otsustavad Ameerika idufirmad Euroopasse ümber asuda?
    • Tech Offshore arenduskeskuste võrdlus: Euroopa (Poola), ASEAN (Filipiinid), Euraasia (Türgi).
    • Millised on CTO ja CIOde peamised väljakutsed?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2025 by The Codest. Kõik õigused kaitstud.

    etEstonian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch elGreek etEstonian