Uygulamaları oluşturmak ve dağıtmak için birçok açık kaynaklı mimari standart mevcuttur. REST (Temsili Durum Aktarımı), SOAP (Basit Nesne Erişim Protokolü), RPC (Uzaktan Yordam Çağrısı) ve GraphQL API'leri en popüler olanlardır.
RESTful API'ler, en çok kullanılan API mimari standardıdır. Birçok uç noktası olan karmaşık RESTful API'leri yazdıysanız, bunların ne kadar karmaşık olabileceğini muhtemelen fark etmişsinizdir. Bu, özellikle uç noktalar arasında yalnızca küçük farklılıklar varsa doğrudur.
RESTful API'leri belirli verileri seçecek kadar esnek olmadığından, veri getirmede de sorunlarla karşılaşabilirsiniz. GraphQL, RESTful API'lerin bu sorunlarını çözer.
GraphQL Nedir?
GraphQL (Graph Query Language), API'ler oluşturmak için bir sorgulama dili ve çalışma zamanıdır. Veri tüketmek için birçok uç noktaya sahip REST API'lerinin aksine, GraphQL API'lerinin bir giriş noktası vardır. Sorgularda tanımlayarak belirli verileri getirebilirsiniz.
bu GraphQL spesifikasyonu sorgulama dilini ve GraphQL sunucularının nasıl çalıştığını tanımlar. Python'dan sunucu tarafı dillerinde GraphQL API'leri oluşturabilir ve kullanabilirsiniz.
JavaScriptve HTTP'yi destekleyen herhangi bir dil.Meta, GraphQL'yi HTTP üzerinde derlemek için REST'e alternatif olarak 2012'de oluşturdu. 2015 yılında GraphQL'i açık kaynak standardı olarak yayınladılar. Bugün, GraphQL temeli, GraphQL spesifikasyonunun geliştirilmesini denetliyor.
GraphQL oldukça yenidir, benimsenme oranı düşüktür ve onu kullanmanın gizli maliyetleri vardır. GraphQL API'leri oluşturmak, özellikle birkaç uç noktası olan küçük projeler için gereksiz yere karmaşık olabilir.
Ayrıca, tüm GraphQL istekleri, isteğin durumundan bağımsız olarak sonunda 200 durum kodu döndürür.
GraphQL Nasıl Çalışır?
Farklı Kaynak odaklı olan REST, GraphQL, verilerle etkileşim kurmak için verileri bir grafik olarak düşünmenizi gerektirir. Verilerin yapısını belirtebilirsiniz ve belirtim, API ile HTTP üzerinden etkileşim için güçlü bir sorgu arabirimi sağlar. bağlı olarak çeşitli özellikleri kullanabileceksiniz. GraphQL paketi veya kitaplığı kullanmayı seçersiniz.
GraphQL şemaları, talep edilebilir nesneyi ve onun kullanılabilir alanlarını tanımlayan nesne türlerini içerir. API sorgularında ve mutasyonlarında GraphQL paketi, sorguları doğrular ve belirtilen işleyici işlevlerine (çözümleyiciler) dayalı olarak sorguları yürütür.
Neden GraphQL Kullanmalısınız?
REST, kullanımı kolay bir standarttır ve çoğu programlama dilinde RESTful API'leri hızlı bir şekilde oluşturmak için araçlar bulunur. Ancak, RESTful API'leri oluşturma ve kullanmayla ilgili birçok sorun vardır.
Geliştiricilerin bazı kullanım durumları için GraphQL'i tercih etmelerine neden olan REST ile ilgili sorunlardan bazıları şunlardır.
Verimsiz Veri Alma
RESTful API'leri, verileri uç noktanın özelliklerine göre aktarır. Uç noktanın işleyici işlevinde sabit kodlanmış olanın ötesindeki verileri alacak kadar esnek değiller.
Bir uç noktanın arama sırasında bir veri listesi döndürdüğünü ve alanlar için değerler veya ölçütler belirtmeniz gerektiğini varsayalım. Bu durumda, geliştiricinin bir uç nokta oluşturması ve verileri döndürmek için iş mantığını tanımlaması gerekir. Değerli kaynağı manuel olarak ayrıştırabilirsiniz, bu da sonunda daha fazla zaman alır.
GraphQL, verimsiz veri alma sorununu çözer çünkü API'leri sorgulayarak ölçütlere ve spesifikasyonlara dayalı verileri esnek bir şekilde döndürebilirsiniz.
GraphQL API'leri etkileşimlidir; almanız gereken verileri kolay, okunabilir bir sözdiziminde belirtebilirsiniz.
{
kullanıcı (burada: {yaş: {_eq: "89"}}) {
isim
okul(Neresi: {canlı: {_eq: doğru}}) {
biyo
milliyet
}
}
}
Yukarıdaki GraphQL sorgusu bir kullanıcı girişler için şema yaş alan 89'dur. Sorgunun, girişler için katıştırılmış bir sorgusu vardır; burada canlı alan değerlendirir doğru. Şemadan isim, biyografi ve uyruk alanlarını döndürür.
Hızlı Geliştirme
GraphQL API'leri oluşturmak ve kullanmak, özellikle proje boyutu arttıkça REST kullanmaktan daha kolaydır. Geliştirme aşamasında, RESTful API'leri geliştirirken yapacağınız kadar çok rota ve işleyici işlevi geliştirmeniz gerekmez. GraphQL API'lerini kullanmak, RESTful API'leri kadar sıkıcı değildir.
REST'te, tek bir uç noktanın olduğu GraphQL'den farklı olarak, farklı uç noktalar farklı kaynaklara erişim sağlar. Bu esneklik ve performans sağlar ve sorgular farklı çözümleyici işlevlerini çağırabilir.
GraphQL Şema Tanımlama Dili
GraphQL Şema Tanımlama Dili (SDL), GraphQL hizmetleri için şemaları belirtir.
GraphQL SDL sözdiziminin okunması ve anlaşılması kolaydır. Şemanızın yapısını şu dosyada belirteceksiniz: .grafql veya .grafqls eklenti.
tip İnsan {
isim: Sicim!
yaş: Int!
}AddHuman'ı girin {
isim: Sicim!
yaş: Int!
}tip mutasyon {
CreateHuman (giriş: AddHuman!): İnsan!
İnsanı Sil (id: Int!): Sicim!
UpdateHuman (id: Int!): Sicim!
}
tip Sorgu {
GetHuman (id: Int!): İnsan!
GetHumans: [İnsan!]!
}
Yukarıdaki GraphQL kodu, istekler için API'nin yapısını tanımlayan bir GraphQL API şemasıdır. Şema, API için CRUD işlevselliğini tanımlar.
İstemci tarafında, şemanın yapısına ve istemcinin verilerine veya işlemine bağlı olarak, istemci bir sorgu (REST'te AL veya SİL) veya mutasyon (PUT veya POST).
İşte sorgulamaya bir örnek İnsan şema.
sorgu İnsan {
isim
yaş
}
Yukarıdaki sorgu, insan şemasının isim Ve yaş alan verileri.
GraphQL mutasyonları, sorguların aksine oldukça farklı bir sözdizimine sahiptir. İşte örnek bir mutasyon işlemi İnsan şema.
mutasyon {
CreateHuman (giriş: { ad:"Adam", yaş: 1000000000000000,}) {
isim
yaş
}
}
Mutasyon kodu girişleri isim Ve yaş alanları istemciye gönderir ve alanlardan verileri döndürür.
GraphQL API'nizi oluştururken kalıcılık için bir veri deposuna ihtiyacınız olacak. REST ve çoğu HTTP tabanlı web mimarisi gibi GraphQL de durum bilgisizdir ve uygulamanız için herhangi bir veri deposunu veya veritabanını kullanabilirsiniz.
Bir GraphQL API'si Oluşturma
GraphQL bir belirtimdir ve GraphQL'yi en popüler sunucu tarafı dillerinde oluşturabilirsiniz. Projeniz için ihtiyaç duyduğunuz özelliklere sahip bir kitaplık bulmanız gerekecek.
Bir GraphQL kitaplığı seçerken, tüm GraphQL türlerini ve işlemlerini destekleyen, zengin özelliklere sahip bir kitaplık kullanmak istersiniz. Çoğu kitaplık ya şema öncelikli ya da kod öncelikli bir yaklaşım benimser. İlkinde, bir GraphQL şeması tanımlarsınız ve kitaplık çözümleyiciler ve standart kod üretir. İkincisi için, bir şema tanımlamadan çözümleyicileri sabit olarak kodlarsınız.
GraphQL Benimsiyor
GraphQL'in başlangıcından bu yana geliştiriciler ve şirketler, kullanımını basitleştirmek için araçlar yayınladılar. Bunlar, daha küçük ve orta ölçekli projeler için geliştirme süresini azaltabilir.
Daha fazla bilgi edinmek için açık kaynaklı GraphQL istemcilerine, GraphQL belgelerine ve teknik özelliklerine göz atabilirsiniz.