Bir GraphQL API’sinin size nasıl ekstra güç sağlayabileceğini ve geliştirme sürenizi kısaltabileceğini öğrenin.
Uygulamaları oluşturmak ve dağıtmak için birçok açık kaynaklı mimari standart mevcuttur. REST (Temsili Durum Transferi), SOAP (Basit Nesne Erişim Protokolü), RPC (Uzaktan Prosedürel Çağrı) ve GraphQL API’leri en popüler olanlarıdır.
RESTful API’ler en çok kullanılan API mimari standardıdır. Birçok uç noktaya sahip karmaşık RESTful API’ler 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 geçerlidir.
RESTful API’ler belirli verileri seçecek kadar esnek olmadığı için veri alma ile ilgili sorunlarla da karşılaşabilirsiniz. GraphQL, RESTful API’lerin bu sorunlarını çözer.
GraphQL Nedir?
GraphQL (Graph Query Language), API’ler oluşturmak için bir sorgu 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 açıklayarak belirli verileri getirebilirsiniz.
GraphQL özelliği , sorgu dilini ve GraphQL sunucularının nasıl çalıştığını tanımlar. Python’dan Javascript’e kadar sunucu tarafı dillerinde ve HTTP’yi destekleyen herhangi bir dilde GraphQL API’leri oluşturabilir ve kullanabilirsiniz .
Meta, HTTP üzerine inşa etmek için REST’e alternatif olarak 2012’de GraphQL’yi oluşturdu. 2015 yılında GraphQL’i açık kaynak standardı olarak yayınladılar. Bugün, GraphQL temeli, GraphQL belirtiminin gelişimini denetlemektedir.
GraphQL oldukça yenidir, benimsenmesi düşüktür ve onu kullanmanın gizli maliyetleri vardır. GraphQL API’leri oluşturmak, özellikle birkaç uç noktaya sahip 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 kodunu döndürür.
GraphQL Nasıl Çalışır?
Kaynak odaklı olan REST’ten farklı olarak GraphQL, verilerle etkileşim kurmak için verileri bir grafik olarak düşünmenizi gerektirir. Verinin yapısını belirtebilirsiniz ve belirtim, API ile HTTP üzerinden etkileşim kurmak için sağlam bir sorgu arabirimi sağlar. Kullanmayı seçtiğiniz GraphQL paketine veya kitaplığına bağlı olarak çeşitli özellikleri kullanabileceksiniz.
GraphQL şemaları, talep edilebilir nesneyi ve onun kullanılabilir alanlarını tanımlayan nesne tiplerini içerir. API sorguları 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 tüketmeyle ilgili birçok sorun vardır.
İşte geliştiricilerin bazı kullanım durumları için GraphQL’yi tercih etmesine neden olan REST ile ilgili bazı sorunlar.
Verimsiz Veri Alma
RESTful API’ler, verileri uç noktanın belirtimine 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 çağrı üzerine 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.
Kriterlere ve spesifikasyonlara dayalı verileri esnek bir şekilde döndürmek için API’leri sorgulayabildiğinizden, GraphQL verimsiz veri alma sorununu çözer.
GraphQL API’leri etkileşimlidir; almanız gereken verileri kolay, okunabilir bir sözdiziminde belirtebilirsiniz.
{
user(where: {age: {_eq: “89”}}) {
name
school(where: {alive: {_eq: true}}) {
bio
nationality
}
}
}
Yukarıdaki GraphQL sorgusu, yaş alanının 89 olduğu girişler için bir kullanıcı şemasını sorgular. Sorgunun, canlı alanın true olarak değerlendirdiği girişler için gömülü bir sorgusu vardır . Şemadan ad, biyografi ve uyruk alanlarını döndürür.
Hızlı Geliştirme
GraphQL API’lerini 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ı .graphql veya .graphqls uzantılı bir dosyada belirteceksiniz .
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!]!
}
Yukarıdaki GraphQL kodu, istekler için API’nin yapısını tanımlayan bir GraphQL API’sinin şemasıdır. Şema, API için CRUD işlevselliğini tanımlar.
İstemci tarafında, şemanın yapısına ve müşterinin verilerine veya işlemine bağlı olarak, istemci bir sorgu (REST’te GET veya DELETE) veya bir mutasyon (PUT veya POST) yürütebilir.
İşte İnsan şemasını sorgulamaya bir örnek.
query Human {
name
age
}
Yukarıdaki sorgu, insan şemasının adını ve yaş alanı verilerini döndürür.
GraphQL mutasyonları, sorguların aksine oldukça farklı bir sözdizimine sahiptir. İşte İnsan şeması üzerinde örnek bir mutasyon işlemi.
mutation {
CreateHuman(input:{ name:”man”, age:1000000000000000,}) {
name
age
}
}
Mutasyon kodu , istemciye ad ve yaş alanlarını girer 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 durumsuzdur ve uygulamanız için herhangi bir veri deposunu veya veritabanını kullanabilirsiniz.
GraphQL Desteklenen Diller
GraphQL bir belirtimdir ve GraphQL’yi en popüler sunucu tarafı dillerinde oluşturabilirsiniz. Projeniz için ihtiyaç duyduğunuz özelliklere sahip bir kütüphane 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 ortak kod üretir. İkincisi için, bir şema tanımlamadan çözümleyicileri sabit kodlarsınız.
GraphQL Kabul Ediliyor
GraphQL’nin 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 özelliklerine göz atabilirsiniz.