Kontentke ótiw

GraphQL

Wikipedia, erkin enciklopediya
12:37, 2025 j. marttıń 23 waqtındaǵı Bekan88 (talqılaw | úlesi) paydalanıwshı versiyası.
(parqı) ← Eskilew nusqası | Eń sońǵı nusqa (parqı) | Jańalaw nusqası→ (parqı)

GraphQL ‒ bul qanday maǵlıwmatlar alınıwı yamasa ózgertiliwi kerekligin anıqlawǵa imkaniyat beretuǵın maǵlıwmatlardı soraw hám manipulyaciyalaw tili ("deklarativ maǵlıwmatlardı alıw"). GraphQL serveri ayırım dereklerden alınǵan maǵlıwmatlardı qollanıp klient sorawın isley aladı hám nátiyjelerdi birlesken grafikte kórsete aladı.[1] Til hár qanday arnawlı maǵlıwmatlar bazasına yaki saqlaw mexanizmine baylanıspaǵan. GraphQL ushın bir neshe ashıq kodlı orınlaw mexanizmleri bar.

Tariyxı

Facebook GraphQL jetilistiriwin 2012-jılda basladı hám 2015-jılda joba specifikaciyası hám etalon implementaciyasın ashıq kodlı túrinde shıǵardı.[2] 2018-jılı GraphQL kommerciyalıq emes Linux Foundation tárepinen alıp barılatuǵın jańadan qurılǵan GraphQL Foundation-ǵa ótkerildi.

2018-jıl 9-fevral kúni GraphQL Schema Definition Language specifikaciyanıń bir bólimi boldı.[3]

Kópshilik ataqlı ashıq APIleri GraphQL-di olarǵa kiriwdiń ádettegi usılı retide qabıl etti. Olarǵa Facebook, GitHub, Yelp, Shopify hám Google Directions API-leriniń kópshilik API-leri kiredi.[4]

Dizayn

GraphQL maǵlıwmatlardı oqıwdı, jazıwdı (ózgertiwdi) hám maǵlıwmatlardaǵı ózgerislerge jazılıwdı (real waqıt jańalanıwları - ádette WebSockets arqalı iske asırıladı) qollap-quwatlaydı.[5] GraphQL xızmeti maydanları bar tiplerdi anıqlaw, sonnan keyin hár bir maydan ushın maǵlıwmatlardı sheshetuǵın funkciyalardı támiyinlew arqalı jaratıladı. Tipler hám maydanlar sxema anıqlaması dep atalatuǵın nárseni quraydı. Maǵlıwmatlardı alıp keletuǵın hám kartalaytuǵın funkciyalar rezolverler dep ataladı.[6]

Sxema boyınsha tekserilgennen keyin, GraphQL sorawı server tárepinen orınlanadı. Server dáslepki sorawdıń formasın kórsetetuǵın nátiyjeni, ádette JSON túrinde, qaytaradı.[7]

Tip sisteması

GraphQL sxemasınıń tip túri, ádette Query, soraw qılınıwı múmkin bolǵan barlıq maydanlardı óz ishine aladı. Basqa tipler GraphQL serveri qaytara alatuǵın obektlerdi hám maydanlardı anıqlaydı. Qatarlar, sanlar hám ID-lerdi kórsetiw ushın skalyarlar dep atalatuǵın bir neshe tiykarǵı tipler bar.

Maydanlar ádette null bolıwı múmkin dep anıqlanadı, al maydandı null bolmaytuǵın (talap etiletuǵın) etiw ushın aqırǵı islew belgisi qollanılıwı múmkin. Maydan tipin kvadrat qawsırmalarda maydandı dizim retinde anıqlawǵa boladı (mısalı, authors: [String]).[8]

type Query {
  currentUser: User
}

type User {
  id: ID!
  name: String!
}

Sorawlar

GraphQL sorawı klientke kerek bolǵan maǵlıwmatlardıń dál formasın anıqlaydı.

query CurrentUser {
  currentUser {
    name
    age
  }
}

GraphQL serveri tárepinen tastıyıqlanǵannan hám orınlanǵannan keyin, maǵlıwmatlar birdey formada qaytarıladı.

JSON
{
  "currentUser": {
    "name": "Djon Doe",
    "age": 23
  }
}

Mutaciyalar

GraphQL mutaciyası maǵlıwmatlardı jaratıwǵa, jańalawǵa yaki óshiriwge múmkinshilik beredi. Mutaciyalar ádette klientten serverge maǵlıwmatlardı jiberiwge imkaniyat beretuǵın ózgeriwshilerdi óz ishine aladı. Mutaciya operaciya tamamlanǵannan keyin klientke qaytarılatuǵın maǵlıwmatlardıń formasın da anıqlaydı.

mutation CreateUser($name: String!, $age: Int!) {
  createUser(userName: $name, age: $age) {
    name
    age
  }
}

Ózgeriwshiler mutaciyadaǵı ózgeriwshiler atlarına sáykes keletuǵın maydanları bar obekt sıpatında jiberiledi.

{
  "name": "Xan Solo",
  "age": 42
}

Operaciya tamamlanǵannan keyin, GraphQL serveri mutaciya tárepinen anıqlanǵan formaǵa sáykes keletuǵın maǵlıwmatlardı qaytaradı.

{
  "data": {
    "createUser": {
      "name": "Xan Solo",
      "age": 42
    }

Jazılıwlar

GraphQL sonday-aq jazılıw dep atalatuǵın operaciyada serverden klientke jiberilgen tikkeley jańalanıwlardı qollap-quwatlaydı. Taǵı da, klient jańalanıw ámelge asırılǵan sayın oǵan kerek bolǵan maǵlıwmatlardıń formasın anıqlaydı.

subscription {
  newPerson {
    name
    age
  }
}

GraphQL serveri arqalı baylanıslı maydandı jańartatuǵın mutaciya ámelge asırılǵanda, jazılıw arqalı ornatılǵan formatta barlıq jazılǵan klientlerge maǵlıwmatlar jiberiledi.

{
  "newPerson": {
    "name": "Jane",
    "age": 23
  }
}

Basqa soraw tilleri menen salıstırıw

GraphQL SPARQL sıyaqlı tolıq grafikalıq soraw tilin, hátte ótpeli jabılıwdı qollap-quwatlaytuǵın SQL dialektlerin de usınbaydı. Mısalı, jeke adamnıń ata-anaların xabarlaytuǵın GraphQL interfeysi bir sorawda olardıń barlıq ata-babalarınıń toplamın qaytara almaydı.

Testlew

GraphQL API-lerin GraphQL sorawların jiberip hám nátiyjelerdiń durıslıǵın tekserip qol menen yaki avtomatlastırılǵan qurallar menen testlewge boladı. Avtomatlastırılǵan test jaratıw da múmkin.[9] Tiplengen sxema hám introspekciya imkaniyatları sebepli izlewge tiykarlanǵan texnikalar arqalı jańa sorawlar jaratıla aladı.[10]

GraphQL ámelge asırıwların testlew ushın qollanılatuǵın baǵdarlamalıq támiynat qurallarınıń ayırımlarına Postman, GraphiQL, Apollo Studio, GraphQL Hive, GraphQL Editor hám Step CI kiredi.

Tolıq stekli qosımshalarda GraphQL diń bir neshe ámeliy implementaciyaları hújjetlestirilgen. Mısalı, bir qollanba GraphQL-dı MongoDB[1] bekendi hám React-qa tiykarlanǵan frontend menen qalay integraciyalawǵa bolatuǵının kórsetedi. Oqıwlıq MongoDB menen baylanıs etetuǵın GraphQL serverin ornatıwdı, sonıń ishinde rezolverlerdi konfiguraciyalaw, maǵlıwmatlardı alıwdı optimallastırıw hám qátelerdi islew strategiyaların tolıq kórsetedi. Bul mısal zamanagóy veb-qosımshalarda dinamikalıq maǵlıwmatlar óz-ara tásirlerin basqarıwda GraphQL-dıń iykemliligin kórsetedi.

Derekler

  1. „Learn GraphQL Fundamentals with Fullstack Tutorial“ (en). www.howtographql.com. Qaraldı: 25-aprel 2023-jıl.
  2. „GraphQL: A data query language“ (14-sentyabr 2015-jıl).
  3. „GraphQL SDL included in Github repository“. GitHub.
  4. „Popular public APIs that use GraphQL“. Frontendeng.dev (25-iyul 2023-jıl).
  5. „GraphQL“. facebook.github.io. Facebook. 18-iyul 2018-jılda túp nusqadan arxivlendi. Qaraldı: 4-iyul 2018-jıl.
  6. „Introduction to GraphQL“. graphql.org. Qaraldı: 25-aprel 2023-jıl.
  7. „Execution“. graphql.org. Qaraldı: 25-aprel 2023-jıl.
  8. „GraphQL“. spec.graphql.org. Qaraldı: 25-aprel 2023-jıl.
  9. Vargas, D. M.; Blanco, A. F.; Vidaurre, A. C. (2018). Deviation Testing: A Test Case Generation Technique for GraphQL APIs. pp. 1–9. 
  10. Karlsson, Stefan; Causevic, Adnan; Sundmark, Daniel „Automatic Property-based Testing of GraphQL APIs“,. 2021 IEEE/ACM International Conference on Automation of Software Test (AST). Madrid, Spain: IEEE, May 2021 — 1–10 bet. DOI:10.1109/AST52587.2021.00009. ISBN 978-1-6654-3567-3.