GraphQL: alternatīva REST uz HTTP

GraphQL: alternatīva REST uz HTTP

Lietojumprogrammu veidošanai un izplatīšanai pastāv daudzi atvērtā pirmkoda arhitektūras standarti. Populārākās ir REST (reprezentatīvā stāvokļa pārsūtīšana), SOAP (vienkāršā objekta piekļuves protokols), RPC (attālās procedūras zvans) un GraphQL API.





RESTful API ir visbiežāk izmantotais API arhitektūras standarts. Ja esat uzrakstījis sarežģītas RESTful API ar daudziem galapunktiem, iespējams, esat sapratis, cik sarežģīti tie var būt. Tas jo īpaši attiecas uz gadījumiem, kad starp galapunktiem ir tikai nelielas atšķirības.





DIENAS VIDEO MAKEUSEOF

Var rasties arī problēmas ar datu iegūšanu, jo RESTful API nav pietiekami elastīgas, lai atlasītu konkrētus datus. GraphQL atrisina šīs RESTful API problēmas.





Kas ir GraphQL?

GraphQL (Graph Query Language) ir vaicājumu valoda un izpildlaiks API izveidei. Atšķirībā no REST API ar daudziem datu patēriņa galapunktiem, GraphQL API ir viens ieejas punkts. Varat iegūt konkrētus datus, aprakstot tos vaicājumos.

The GraphQL specifikācija definē vaicājuma valodu un to, kā darbojas GraphQL serveri. Varat izveidot un izmantot GraphQL API servera puses valodās no Python līdz Javascript , un jebkura valoda, kas atbalsta HTTP.



Meta 2012. gadā izveidoja GraphQL kā alternatīvu REST, lai izveidotu HTTP. Viņi izlaida GraphQL kā atvērtā pirmkoda standartu 2015. gadā. Mūsdienās GraphQL fonds pārrauga GraphQL specifikācijas izstrādi.

GraphQL ir diezgan jauns, ar zemu ieviešanu, un tā izmantošanai ir slēptas izmaksas. GraphQL API izveide var būt nevajadzīgi sarežģīta, īpaši maziem projektiem ar dažiem galapunktiem.





Turklāt visi GraphQL pieprasījumi galu galā atgriež statusa kodu 200 neatkarīgi no pieprasījuma stāvokļa.

Kā darbojas GraphQL?

  GraphQL's functions and syntax

Atšķirībā no REST, kas ir orientēts uz resursiem , GraphQL pieprasa, lai dati būtu jādomā kā diagramma, lai mijiedarbotos ar datiem. Varat norādīt datu struktūru, un specifikācija nodrošina spēcīgu vaicājumu interfeisu mijiedarbībai ar API, izmantojot HTTP. Atkarībā no tā, jūs varēsiet izmantot dažādas funkcijas GraphQL pakotne vai bibliotēka jūs izvēlaties izmantot.





GraphQL shēmas ietver objektu tipus, kas definē pieprasāmo objektu un tā pieejamos laukus. API vaicājumos un mutācijās GraphQL pakotne apstiprina vaicājumus un izpilda vaicājumus, pamatojoties uz norādītajām apstrādātāja funkcijām (atrisinātājiem).

Kāpēc jums vajadzētu izmantot GraphQL?

REST ir ērti lietojams standarts, un lielākajai daļai programmēšanas valodu ir rīki ātrai RESTful API izveidei. Tomēr ir daudz problēmu, veidojot un patērējot RESTful API.

Šeit ir dažas problēmas ar REST, kuru dēļ izstrādātāji dažiem lietošanas gadījumiem dod priekšroku GraphQL.

Neefektīva datu ienešana

RESTful API pārraida datus, pamatojoties uz galapunkta specifikāciju. Tie nav pietiekami elastīgi, lai izgūtu datus, kas pārsniedz galapunkta apstrādātāja funkcijā iekodētos datus.

Pieņemsim, ka galapunkts atgriež izsaukuma datu sarakstu, un jums ir jānorāda lauku vērtības vai kritēriji. Tādā gadījumā izstrādātājam ir jāizveido beigu punkts un jādefinē biznesa loģika datu atgriešanai. Vērtīgo resursu var parsēt manuāli, kas galu galā aizņem vairāk laika.

GraphQL atrisina neefektīvas datu ielādes problēmu, jo varat pieprasīt API, lai elastīgi atgrieztu datus, pamatojoties uz kritērijiem un specifikācijām.

GraphQL API ir interaktīvas; varat norādīt izgūstamos datus viegli lasāmā sintaksē.

{ 
user(where: {age: {_eq: "89"}}) {
name
school(where: {alive: {_eq: true}}) {
bio
nationality
}
}
}

Iepriekš minētais GraphQL vaicājums vaicā a lietotājs shēma ierakstiem, kur vecums lauks ir 89. Vaicājumam ir iegults vaicājums ierakstiem, kuros dzīvs lauks novērtē taisnība . Tas atgriež vārdu, biogrāfijas un tautības laukus no shēmas.

Ātra attīstība

GraphQL API izveide un patērēšana ir vienkāršāka nekā REST izmantošana, it īpaši, palielinoties projekta apjomam. Izstrādes posmā jums nav jāizstrādā tik daudz maršrutu un apstrādātāja funkciju, kā tas būs, izstrādājot RESTful API. GraphQL API izmantošana nav tik nogurdinoša kā RESTful API.

Programmā REST dažādi galapunkti nodrošina piekļuvi dažādiem resursiem, atšķirībā no GraphQL, kur ir viens galapunkts. Tas nodrošina elastību un veiktspēju, un vaicājumi var izsaukt dažādas atrisinātāja funkcijas.

GraphQL shēmas definīcijas valoda

GraphQL shēmas definīcijas valoda (SDL) nosaka GraphQL pakalpojumu shēmas.

kā salabot, ja nav nodrošināts internets

GraphQL SDL sintakse ir viegli lasāma un saprotama. Shēmas struktūru norādīsiet failā ar .graphql vai .graphqls pagarinājumu.

type Human { 
name: String!
age: Int!
}

input AddHuman {
name: String!
age: Int!
}

type Mutation {
CreateHuman(input: AddHuman!): Human!
DeleteHuman(id: Int!): String!
UpdateHuman(id: Int!): String!
}

type Query {
GetHuman(id: Int!): Human!
GetHumans: [Human!]!
}

Iepriekš minētais GraphQL kods ir GraphQL API shēma, kas nosaka API struktūru pieprasījumiem. Shēma definē API CRUD funkcionalitāti.

Klienta pusē, pamatojoties uz shēmas struktūru un klienta datiem vai darbību, klients var izpildīt vaicājums (GET vai DELETE REST) ​​vai a mutācija (PUT vai POST).

Šeit ir vaicājuma piemērs Cilvēks shēma.

query Human { 
name
age
}

Iepriekš minētais vaicājums atgrieztu cilvēka shēmu nosaukums un vecums lauka dati.

GraphQL mutācijām ir diezgan atšķirīga sintakse atšķirībā no vaicājumiem. Šeit ir piemērs mutācijas darbībai uz Cilvēks shēma.

mutation { 
CreateHuman(input:{ name:"man", age:1000000000000000,}) {
name
age
}
}

Mutācijas koda ievade nosaukums un vecums laukus klientam un atgriež datus no laukiem.

Veidojot GraphQL API, jums būs nepieciešams datu krātuve, lai nodrošinātu noturību. Tāpat kā REST un lielākā daļa uz HTTP balstītas tīmekļa arhitektūras, arī GraphQL ir bezvalsts, un savai lietotnei varat izmantot jebkuru datu krātuvi vai datu bāzi.

GraphQL API izveide

  GraphQL atbalstītās valodas

GraphQL ir specifikācija, un jūs varat izveidot GraphQL populārākajās servera puses valodās. Jums būs jāatrod bibliotēka ar jūsu projektam nepieciešamajām funkcijām.

Izvēloties GraphQL bibliotēku, vēlaties izmantot ar funkcijām bagātu bibliotēku, kas atbalsta visus GraphQL veidus un darbības. Lielākā daļa bibliotēku izmanto vai nu shēmu, vispirms vai kodu vispirms. Pirmajā gadījumā jūs definējat GraphQL shēmu, un bibliotēka ģenerē atrisinātājus un standarta kodu. Pēdējā gadījumā jūs stingri kodējat atrisinātājus, nedefinējot shēmu.

GraphQL tiek pieņemts

Kopš GraphQL pirmsākumiem izstrādātāji un uzņēmumi ir izlaiduši rīkus, lai vienkāršotu tā lietošanu. Tie var samazināt mazāku un vidēju projektu izstrādes laiku.

Lai uzzinātu vairāk, varat apskatīt atvērtā pirmkoda GraphQL klientus, GraphQL dokumentāciju un tās specifikācijas.