GraphQL

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ı. 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ı. 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ı.

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.

## 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ı. GraphQL xızmeti maydanları bar tiplerdi anıqlaw, sonnan keyin hárbir 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ı.

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ı.

### 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]).
```graphql
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ı.
```graphql
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
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ı.
```graphql
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.
```json
{
 "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ı.
```json
{
 "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ı.
```graphql
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.
```json
{
 "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. Tiplengen sxema hám introspekciya imkaniyatları sebepli izlewge tiykarlanǵan texnikalar arqalı jańa sorawlar jaratıla aladı.

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

__BÖLİDİMÖNDEMEW__