Menu

GraphQL nədir və necə tətbiq olunur?

GraphQL nədir? GraphQL, API'ları yaratmağın və məlumat alış-verişi aparmağın ən müasir yollarından biridir.

GraphQL Facebook tərəfindən yaradılıb və 2012-ci ildə öz mobil proqramında tətbiq edilib. 2015-ci ildən etibarən açıq mənbəlidir və tez bir zamanda API əsaslı məlumat alış verişi üçün standarta çevrilərək geniş istifadə olunmağa başlayıb.

GraphQL başqa bir formada desək, melumatların necə sorğulanacağını müəyyən edən sintaksisdir. GraphQL bəzi əsas xüsusiyyətə malikdir:

1. İstifadəçiyə lazım olan məlumatları istəyə uyğun olaraq müəyyənləşdirməyə imkan verir.

2. Eyni anda bir neçə mənbədən (burada mənbə deyərkən REST API düşünülə bilər) məlumat toplamağı asanlaşdırır. GraphQL ilə istifadəçi tələb olunan məlumatları əldə etmək üçün bir neçə REST sorğusuna muraciət etmək əvəzinə serverə sadəcə bir sorğu göndərərək eyni melumatı əldə edə bilər.

 

İndi isə GraphQL sorğusunun yazılaşına və istifadəsinə baxaq.

GraphQL sorğusu muəyyən bir sintaksisə sahib, istifadəçi tərəfindən serverə göndərilən və əvəzində JSON formasında istifadəçiyə cavab qaytaran strukturdur.

GraphQL sorğusunda ilk gözə çarpan, sorğunun əldə olunan cavabla eyni struktura sahib olmasıdır. Bu, göndərdiyiniz sorğu qarşılığında necə bir cavab əldə edə biləcəyinizi asanlıqla bilməyinizi təmin edir.

Yuxarıdakı sorğuda, istifadəçi yeni bir sorğu yaradaraq "postsList" məlumatının sadəcə sayını (count) və məlumatın başlığını (title) tələb edir. Bir çox halda bu məlumatın daha çox detalları mövcud ola bilər. İstifadəçi istəyə uyğun olaraq lazım olmayan məlumatları əldə etməməklə server client arasında lazımsız yüklənmənin qarşısını alır.

Sorğudan göründüyü kimi, istifadəçi təkcə əldə edilən məlumatın hansı formada olduğunu yox hətta məlumatın necə filtr olunacağını təyin edə bilir. Elə postları əldə edirik ki yalnızca "Possum" başlığına sahibdir.

 

İndi isə REST API-lar ilə müqaisəli şəkildə GraphQL-in üstünlüklərinə baxaq.

Hər birimiz REST API-ların proqramlama prosesində necə istifadə olunduğunu bilirik.

REST API-ların ötürdüyü məlumat müəyyən bir struktura sahibdir və əvvəlcədən istifadəçi ilə razılaşdırılır. Ötürülən məlumat statik formada olduğu üçün, mövcud API-dan hər hansı yeni bir məlumat lazım olduğu zaman front-end və back-end komandaları arasında müəyyən koordinasiya və hər iki tərəfdə dəyişikliklər tələb olunur. GraphQL həm front-end, həm də back-end komandaları üçün bu məcburiyyəti aradan qaldırır. Bunun səbəbi GraphQL-in nisbətən daha dinamik olması və sorğuya uyğun olaraq məlumatlar ötürməy qabiliyyətidir. Belə ki, GraphQL front-end proqramçılarına tək bir API-dan bütün mümkün məlumat formalarını sorğulamaq və dəyişdirmək imkanı verir.

Bundan başqa, development prosesində birdən çox URL-dən məlumat əldə etmək lazım gələ bilir. Tipik REST API-ları istifadə edərkən bu istifadəçi və server arasında birdən çox məlumat alış-verişi deməkdir. GraphQL ilə isə bir sorğuda tətbiqinizin ehtiyac duyduğu bütün məlumatları əldə edə bilərsiniz.

Bu da hətta zəif internet bağlatılarında belə yüksək performans əldə etməyə və web səhifələrin daha tez yüklənməyinə gətirib çıxarır.

Bəzi hallarda isə, hətta sadəce bir REST API-dan məlumata ehtiyac olsada, əldə edilən JSON həddindən artıq böyük olur və bizə lazım olmayan məlumatları belə həmişə saxlayır. Bu isə lazımsız məlumat alış-verişinə və istifadəçi ilə server arasında gecikmələrə gətirib çıxarır. GraphQL istifadə edərkən sadəcə lazım olan məlumatları əldə etməklə bu problemi aradan qaldırmaq mümkündür.

GraphQL bir çox üstünlüklərə sahib olduğu kimi bəzi dezavantajlara da sahibdir.

1. Özünün nisbətən mürəkkəb sintaksisi səbəbindən kiçik proqramlar üçün istifadəyə uyğun deyil. GraphQL mikroservislər və böyük proyektlər üçün düzgün həll olsa da, sadə proqramlar üçün REST arxitekturası istifadə etmək daha ağıllı ola bilər.

2. GraphQL-in spesifikasiyasına fayl yükləmə xüsusiyyəti daxil edilməyib. Bunun üçün bəzi hallarda sadəcə fayl yükləmə üçün REST API qurmaq məcburiyyətində qala bilərsiniz.

Başqa bir yol isə GraphQL ilə Base64 kodlaşdırmasından istifadə etməkdir. Lakin bu sorğunun daha böyük olmasına gətirib çıxarır və optimal həll deyil.

3. GraphQL-i öyrənmək və tətbiq etmək üçün nisbətən daha çox vaxt lazımdır. Tipik REST API-a nisbətən daha mürəkkəb sintaksisə sahibdir və bir çox hallarda resurs çatışmazlığı səbəbindən komandalar REST API-ları tətbiq etməyə daha maraqlı olurlar.

 

Gördüyünüz kimi, GraphQL-in REST-i əvəz edə biləcəyini söyləmək çox yanlış olardı. Bunun əvəzinə, hər birinin istifadə yerinə uyğun olaraq üstünlüyü olacağı halda tətbiq edilməsi gərəkir.