(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': data().getTime(),įvykis:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); GraphQL: gamybinė patirtis - The Codest
The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2020-08-24
Programinės įrangos kūrimas

GraphQL: gamybinė patirtis

Pawel Wal

2020 m. Jūsų team vis labiau linksta į vieno puslapio programų kūrimą arba bent jau turtingų komponentų įtraukimą į įprastas kelių puslapių programas. Dabar [GraphQL](https://graphql.org/) yra [daugiau nei dvejų metų](https://en.wikipedia.org/wiki/GraphQL) senumo, o tai pagal JavaScript ekosistemos standartus gali būti laikoma brandžiu dalyku. Jautėmės šiek tiek drąsūs, todėl atsisakėme įprastinių JSON API ir pasinėrėme į jas - štai ką sužinojome.

2020 m. Jūsų komanda vis labiau linkstama kurti vieno puslapio programas arba bent jau įtraukti daug komponentų į įprastas daugiapuses programas. [GraphQL](https://graphql.org/) jau [daugiau nei dveji metai](https://en.wikipedia.org/wiki/GraphQL), o tai JavaScript ekosistemų standartus būtų galima laikyti brandžiais. Jautėmės šiek tiek drąsūs, todėl atsisakėme įprastų JSON API ir pasinėrėme į jas - štai ką sužinojome.

Reikia GraphQL serverio

Daugumoje sistemų, naudojamų žiniatinklio kūrimas, įrankiai, skirti JSON API jau yra. Galite sukurti maršruto struktūrą ir lengvai priimti keletą GET ir POST, tada išvesti JSON atsakymą. Ruby svetainėje Bėgiai net turi specialų projektas sąrankos perjungiklis, kuriuo atsisakoma įprastų HTML pertvarkymo gudrybių ir vietoj jų sukuriamas tvirtas API pagrindas. Iš to išplaukia, kad įgudęs kūrėjas naudodami šiuolaikinius įrankius galite sukurti pagrindinę versiją per kelias minutes.

Ne taip yra su GraphQL. Nors yra serverio bibliotekų, skirtų daug kalbų, vis tiek iškart patirsite greičio nuostolių - tiesiog turėsite išsiaiškinti, kas tinka jūsų ekosistemai. Kalbant asmeniškiau, man taip pat nepatinka terminas “serveris”, naudojamas bibliotekai, kurią galima įdiegti į projektą, apibūdinti.

Yra tik vienas galutinis taškas

Metams bėgant pripratome prie tam tikro mąstymo apie API struktūrą. Paprasčiausiai laikėmės REST praktikos. Tai reiškė, kad programėlėje kiekvienam loginiam modeliui reikėjo sukurti kelis galinius taškus. Tai struktūra, kurią lengva suvokti ir API autoriams, ir vartotojams. Be to, ji sukuria gerai suskirstytus metodus galinėje dalyje, todėl argumentavimas apie kodas taip pat paprasta, kaip ir apie pačią API. Šią struktūrą taip pat lengva naudoti vardų erdvėje, pvz. API versijų nustatymas.

"GraphQL" naudoja tik vieną galinį tašką, paprastai /graphql. Kiekviena užklausa į jūsų API bus siunčiama kaip POST užklausa į tą galutinį tašką, o GraphQL serverio pareiga - išsiaiškinti, ko klientas nori, ir tinkamai atsakyti.

Iš pirmo žvilgsnio tai atrodo nepatogus sprendimas: įsivaizduokite, kad viską, kas numatyta JSON API, bandote atlikti naudodami vieną galinį tašką! Tačiau netrukus, kai API subręs ir vienus dalykus pakeis kiti, tai pradės įgauti prasmę. Klasikinėse API deprecation paprastai atliekamas vardų erdvės lygmeniu, pereinant nuo v1 į v2. GraphQL suteikia kur kas daugiau galimybių valdyti, net iki vieno lauko panaikinimo. Įsivaizduokite, kad galite pasakyti REST API vartotojui, jog nenorite, kad jis naudotų pavadinimas lauką ir naudoti fancy_name vietoj to! Pasirodo, tai, kas iš pradžių atrodė nepatogu, iš tikrųjų yra viena geriausių funkcijų.

Viskas įvesta

JSON iš tikrųjų neturi daug rašymo būdų. Yra eilutės, skaičiai, masyvai ir objektai. Be to, jums nesiseka. Tuo tarpu GraphQL viskas prasideda ir baigiasi tipais, nes net šakninės užklausos ir mutacijos yra būtent tipai. GraphQL DSL užtikrina tipų tikrinimą ir serveryje, ir kliente, todėl išvengiama įvairių nemalonių netikėtumų.

Tai labai svarbu, ypač dėl to, kad SPA vis dažniau tikrinami tipai, nesvarbu, ar naudojant TypeScript arba alternatyvas, pavyzdžiui, "Flow". "GraphQL" leidžia lengvai įvesti sudėtingus ir sudėtinius tipus ant numatytųjų reikšmių, ir tai greitai tampa antraeiliu dalyku tiek backend, tiek frontend programuotojams.

Skaityti daugiau: JavaScript testavimas... su Ruby?!

Dokumentai yra įmontuoti

Klasikinės JSON API atveju dokumentacija gali būti papildoma. Net jei taip nėra, galima rinktis iš daugybės metodų. Ar naudojame kokią nors schemą, pvz. OpenAPI? Ar tada konvertuosime jį į žmogui suprantamą formą naudodami tokius įrankius kaip "Swagger"? O gal tiesiog kažkur išmesime visą krūvą Markdown failų? Nors ši problema buvo išspręsta daugybę kartų, vis dar reikia sąmoningų team darbuotojų minčių ir pastangų - iš pradžių sukurti dokumentus, o paskui juos nuolat atnaujinti ir platinti. Tai dar sudėtingesnė problema, kai API turi keletą skyrių, kurie yra prieinami tik, pavyzdžiui, tam tikroms naudotojų rolėms.

GraphQL dokumentacija yra pirmos klasės pilietis, nes dauguma serverių leidžia dokumentuoti tipus ir užklausas vietoje. Nuo 2018 m. pradžios GraphQL schemų apibrėžimo kalba tapo oficialios specifikacijos dalimi, todėl yra būtent vienas būdas dokumentuoti GraphQL API. Be to, kadangi GraphQL leidžia apibrėžti tam tikrų grafiko dalių matomumą, tie naudotojai, kurie neturėtų to daryti, automatiškai negali matyti dokumentų, susijusių su tuo, ko jie negali pasiekti. Tai, kad buvo pasirūpinta šiuo sprendimu ir aiškiomis gairėmis, buvo didelė paspirtis team.

Yra tik dvi veiksmų rūšys

Priešingai nei HTTP GET, POST, PUT, PATCH ir DELETE, "GraphQL" yra tik dviejų tipų veiksmai: Užklausos ir mutacijos. Pagrindinis skirtumas yra tas, kad "Mutations" gali keisti ir keičia sistemos būseną, o "Queries" tik pasyviai skaito duomenys iš.

Prisipažinsiu, kad vis dar abejoju, ar tai bus tiesa. Man patinka HTTP veiksmažodžių gausa bendraujant su ištekliais ir galimybė naudoti būtent tą įrankį, kuris tinka darbui. GraphQL palengvina darbą tais sudėtingais atvejais, kai bet kuris iš HTTP veiksmažodžių netiksliai tinka, tačiau tenka mokėti už tai, kad reikia galvoti, ką konkreti mutacija iš tikrųjų paveiks. Taip pat galima pastebėti, kad kadangi nėra įdiegtos standartinės pavadinimų suteikimo konvencijos, teks rengti vidinius stiliaus vadovus arba rizikuoti sukurti nenuoseklią netvarką.

Jums reikia kliento

Sąveikauti su REST API per HTTP yra labai paprasta naudojant "vanilla JavaScript", o dar lengviau - naudojant moderniąją parsisiųsti API. Tuo tarpu GraphQL atveju, jei norite iš tiesų tinkamo našumo, reikia naudoti kliento biblioteką. Nėra neįmanoma sąveikauti su GraphQL API naudojant tik vanilinį JavaScript - juk tai tik POST užklausos. Tačiau naudojant tik ilgametę Tinklalapis technologijos, pavyzdžiui, užklausų spartinančioji talpykla bendriems API skambučiams, neveiks, nes POST užklausos paprastai nėra spartinančiosios talpyklos.

Kiekvienas protingas GraphQL klientas turi kliento pusės rezultatų spartinimo mechanizmą ir daug kitų funkcijų. Dėl visų šių pasirinkimų pradinio lygio GraphQL kliento konfigūracijos sukūrimas ranka yra visiškai neįveikiama užduotis. Pradedantiesiems dirbti su GraphQL ypač rekomenduoju atkreipti dėmesį į Apollo-Boost nes jame yra labai pagrįstos numatytosios reikšmės.

Klientas pasirenka duomenis

Visiems yra buvę taip: iš API ištraukiame duomenų sąrašą ir jame trūksta kokio nors svarbaus susijusio modelio lauko. Tuomet įgyvendiname įsilaužimą, apimantį N+1 užklausą, ir tuo pat metu pykstame ant galinių kūrėjų, kurie skubiai jį įtraukia. Paprastai taip nebūna su gerai įgyvendinta GraphQL API, nes galime tiesiog gilintis į duomenis tiek, kiek norime. Reikia pamatyti užsakyme nurodyto kliento adresą šioje partijoje? Ne problema - bent jau teoriškai, o tai gražiai veda prie to, kad mus į...

Sudėtingumą sunkiau numatyti

Projektuojant GraphQL iš galinės dalies, gali būti sunku apgalvoti, kaip giliai klientas gali įsigilinti į grafą. Yra daugybė būdų, kaip nustatyti ir stebėti, kaip naudojamas jūsų grafas, ir, leidę kolegoms iš priekinės dalies kurį laiką žaisti, galite pradėti stebėti, kaip ilgos užklausos atlieka gana išradingus duomenų skaitymus jūsų duomenų saugykloje. Naudojant REST API tai lengviau kontroliuoti, nes galite lengvai nustatyti duomenų, kurie bus pasiekiami vienos užklausos metu, apimtį. Dažnai šis nepastebėtas sudėtingumas gali skaudžiai atsiliepti, kai paleidžiate į gamybą. Daugeliu atvejų taip pat nėra akivaizdu, kaip išbristi iš šios duobės, kurią patys išsikasėte.

Sunumeruoti puslapiai yra tikrai sunkūs

Iš tikrųjų tai yra tik liežuvio užkalbėjimas. Pažvelgus į numatyto puslapiavimo mechanizmo veikimą, tikrai galima pajusti, kad "GraphQL" buvo sukurta "Facebook" ir jam skirta. Vadinamosios jungtys iš esmės yra nesibaigiantys grafo briaunų srautai, kuriuose navigacija vykdoma naudojant žymeklius, o ne klasikinius puslapius. Nors nesunku suprasti, kaip tai tinka "Facebook" stiliaus nesibaigiančiam pranešimų srautui, jei norite tvarkingai puslapiuoto sąrašo su galimybe pereiti, tarkime, į 42 puslapį, jums bus daug sunkiau. Žinoma, yra būdų, kaip tai apeiti, bet tai ir yra apėjimo būdai.

Ar tai darytume dar kartą?

Turėdami visus pirmiau išvardytus trūkumus ir skirtumus, tikriausiai manote, kad "GraphQL" vertiname kaip eksperimentą, kuris baigėsi nesėkmingai, ir grįžome tiesiai prie REST API. Tai netiesa. Jei ką nors ir darome, tai siekiame, kad "GraphQL" būtų plačiau naudojama visos organizacijos projektuose. Tai puiki technologija, kuri palengvino ir pagerino mūsų darbą. Tačiau iš pradžių investavome į "GraphQL" visiškai nesuprasdami, kokius augimo skausmus teks patirti.

Jei manote, kad GraphQL gali būti jums tinkama, raginu ryžtis šiam žingsniui. Suteikite sau pakankamai laiko ir erdvės saugiai patirti nesėkmę, ir netrukus galėsite naudotis privalumais!

Taip pat skaitykite:

- Kaip veiksmingai valdyti nuotolinius kūrėjus? CTO vadovas

- Python vs. Ruby? Kurią technologiją turėtumėte naudoti produktui kurti?

- Trumpas vadovas, kaip sukurti ir plėtoti savo rinką. Ką verta žinoti?

Susiję straipsniai

Išmaniojo telefono sveikatos priežiūros programėlės su širdies piktograma ir kylančia sveikatos diagrama, pažymėtos The Codest logotipu, iliustracija, vaizduojanti skaitmeninės sveikatos ir sveikatos technologijų sprendimus.
Programinės įrangos kūrimas

Sveikatos priežiūros programinė įranga: Sveikatos priežiūros paslaugos: tipai, naudojimo atvejai

Įrankiai, kuriais šiandien naudojasi sveikatos priežiūros organizacijos, nė iš tolo neprimena prieš kelis dešimtmečius naudotų popierinių kortelių. sveikatos priežiūros programinė įranga dabar padeda sveikatos sistemoms, pacientų priežiūrai ir šiuolaikiniam sveikatos priežiūros paslaugų teikimui klinikinėse ir...

GERIAUSIAS
Abstrakti mažėjančios stulpelinės diagramos su kylančia rodykle ir auksine moneta, simbolizuojančia ekonomiškumą arba taupymą, iliustracija. Viršutiniame kairiajame viršutiniame kampe pavaizduotas The Codest logotipas ir šūkis "In Code We Trust" šviesiai pilkame fone.
Programinės įrangos kūrimas

Kaip padidinti savo Dev komandą neprarandant produkto kokybės

Didinate savo kūrėjų komandą? Sužinokite, kaip augti neprarandant produkto kokybės. Šiame vadove aptariami ženklai, kad atėjo laikas didinti komandą, komandos struktūra, įdarbinimas, vadovavimas ir įrankiai - ir kaip The Codest gali...

GERIAUSIAS
Programinės įrangos kūrimas

Sukurkite ateičiai atsparias žiniatinklio programas: The Codest ekspertų komandos įžvalgos

Sužinokite, kaip The Codest puikiai kuria keičiamo dydžio interaktyvias žiniatinklio programas, naudodama pažangiausias technologijas ir užtikrindama vientisą naudotojų patirtį visose platformose. Sužinokite, kaip mūsų patirtis skatina skaitmeninę transformaciją ir verslo...

GERIAUSIAS
Programinės įrangos kūrimas

10 geriausių Latvijoje įsikūrusių programinės įrangos kūrimo įmonių

Naujausiame mūsų straipsnyje sužinokite apie geriausias Latvijos programinės įrangos kūrimo įmones ir jų inovatyvius sprendimus. Sužinokite, kaip šie technologijų lyderiai gali padėti pakelti jūsų verslo lygį.

thecodest
Įmonių ir didinimo sprendimai

"Java" programinės įrangos kūrimo pagrindai: A Guide to outsourcing Outsourcing Successfully

Išnagrinėkite šį esminį vadovą, kaip sėkmingai outsourcing "Java" programinę įrangą kurti, kad padidintumėte efektyvumą, įgytumėte patirties ir sėkmingai įgyvendintumėte projektus su The Codest.

thecodest

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

    The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

    Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

    Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian is_ISIcelandic lt_LTLithuanian