GraphQL Neden

REST yerine GraphQL ile entegrasyon yapmayı neden önerdiğimizi keşfedin.

Zonos olarak, entegrasyon için iki ana API türü sunuyoruz: GraphQL ve REST. REST API'leri daha uzun süredir var ve birçok kişi için daha tanıdık olabilir, ancak daha fazla esneklik ve daha hızlı yenilik sağlamak için GraphQL'e geçtik. Her ikisi de hala destekleniyor olsa da, bu kılavuz GraphQL'in sadece entegrasyonlarımızın geleceği değil, aynı zamanda genel entegrasyonların da geleceği ve bugünkü ihtiyaçlarınızı karşılamak için daha güçlü bir araç olduğunu açıklamaktadır.

GraphQL Nedir? 

GraphQL, API'lerle konuşmanın alternatif bir yoludur ve karmaşık veri yapıları ile bunların üzerine arayüzler inşa etmek için son derece uygundur. Verileri ayrı, bağımsız parçalar olarak ele almak yerine, GraphQL verilerin nasıl bağlandığını ve birbirleriyle ilişkili olduğunu gösterir, bu da bilgi istemeyi ve almayı kolaylaştırır.

GraphQL'i, API ile sanki doğrudan veritabanıyla konuşuyormuşsunuz gibi konuşmanıza olanak tanıyan bir sorgu dili olarak düşünün. GraphQL kullanmak, veritabanına mümkün olduğunca yakın olmanızı sağlar, istediğiniz verileri seçip almanıza olanak tanır ve bu da büyük bir performans avantajı sağlar.

GraphQL, Facebook tarafından oluşturuldu ve karmaşık veri yapılarıyla ölçeklenme sorununu çözmek için geliştirilmiştir. Başarılı bir şekilde benimsenmesi sonucunda, giderek daha fazla şirket GraphQL'in API'leri için sağladığı faydaları fark etmeye başladı.

REST'i zaten biliyor musunuz? GraphQL tanıdık gelecek.

GraphQL API'leri, düşündüğünüzden daha kolay çalışılabilir. REST API'leri ile çalışmaya alışkınsanız, işte REST'teki temel kavramların GraphQL'e nasıl dönüştüğüne dair bir bakış.

ÖzellikRESTGraphQL
Uç NoktaFarklı eylemler için birden fazla uç noktaya istek yapılırTüm istekler tek bir uç noktaya (örneğin, /graphql) yapılır
Veri almaVerileri almak için belirli uç noktalarda GET yöntemleri kullanılırTam olarak gereken veriyi talep etmek için sorgular kullanılır, aşırı veya yetersiz veri alımını azaltır
Veri değiştirme/eylemlerVerileri değiştirmek veya işlemek için POST, PUT, PATCH veya DELETE gibi HTTP yöntemleri kullanılır.İşlemleri gerçekleştirmek için mutasyonlar kullanılır (örneğin, taraflar oluşturma, varış maliyetlerini hesaplama)
Yanıt formatıSabit yanıt formatları, ihtiyaç duyulup duyulmadığına bakılmaksızın tüm önceden tanımlı alanları döndürürEsnek yanıtlar, dahil edilecek alanları tam olarak belirtmeye olanak tanır, gereksiz veri transferini azaltır (Bu esneklik karmaşık geliyorsa, belgelerimizdeki önceden yazılmış sorgu örneklerini kullanarak RESTful bir deneyim elde edebilirsiniz)
Veri bağlantısıİlişkili verileri almak için genellikle birden fazla istek gereklidirİç içe geçmiş sorgular, ilişkili verileri tek bir istekte almayı sağlar (örneğin, taraf detayları ve gönderim kalemleri birlikte). Kullanıcılar ayrıca, birden fazla mutasyonu tek bir GraphQL isteği içinde yönetmek için iş akışları oluşturabilir, karmaşıklığı azaltabilir ve verimliliği artırabilir

GraphQL'in Avantajları

Daha Hızlı Yanıtlar

GraphQL, kesin veri alımı, tek bir uç nokta kullanımı ve toplama ve önbellekleme yetenekleri sayesinde daha hızlı yanıtlar sağlar.

Kesin Veri Alımı

REST ile yaygın bir sorun, verilerin aşırı veya yetersiz alınmasıdır—ya gereksiz fazla bilgi alırsınız ya da bir seferde ihtiyaç duyduğunuzdan daha azını. GraphQL, tam olarak gerekeni talep etmenize olanak tanıyarak bunu ortadan kaldırır—ne fazla, ne de az. Bu kesinlik, yalnızca performansı artırmakla kalmaz, aynı zamanda API ile etkileşimde bulunanlar için süreci basitleştirir, sistemi daha verimli ve kullanıcı dostu hale getirir.

Bunun nasıl faydalı olduğuna dair örnekler:

  • Bu, ön uç geliştiricilerin UI bileşenleri için tam olarak ihtiyaç duydukları verileri almasına olanak tanır, sunucuya yapılan gidiş-dönüş sayısını azaltır ve performansı artırır.
  • Bir HS kodu sınıflandırması, kartonlama, gönderim değerlendirmesi ve bir landed cost içindeki öğeler için checkout teklifi almak istediğinizi hayal edin. GraphQL API'si ile entegreyseniz, ihtiyacınız olan her şeyi (ve ihtiyaç duymadığınız hiçbir şeyi) tek bir yanıtla almak için gerekli iş akışları ile tek bir çağrı yapabilirsiniz. Buna karşılık, REST API'leri ile önce Classify REST API'sini aramanız, ardından Rating REST API'sini ayrı olarak çağırmanız ve son olarak bu sınıflandırmayı ve gönderim değerlendirmesini Landed Cost REST API'sine üçüncü çağrınıza eklemeniz gerekir. Tüm bu REST API'leri, mümkün olan her bilgiyi döndürür, bu da ihtiyaç duyduğunuz veriyi bulmak için yanıtı ayrıştırmanız gerektiği anlamına gelir. Bu hız tasarrufu, bir landed cost'yi hızlı bir şekilde döndürmekte etki yapar, alıcı ayrılmadan önce.

Tek Uç Nokta

GraphQL API'leri genellikle tek bir uç noktaya sahiptir, REST API'leri ise genellikle farklı kaynaklar ve eylemler için birden fazla uç noktaya sahiptir. Bu, API'yi yönetmeyi ve anlamayı daha basit hale getirir.

Toplama ve Önbellekleme

GraphQL'in sorguları toplama yeteneği ve önbellekleme stratejilerini desteklemesi, önemli performans iyileştirmelerine yol açar. Bu özellikler, ağlar ve sunucular üzerindeki yükü azaltır ve kullanıcılar için daha hızlı, daha güvenilir etkileşimler sağlar.

İyi Tanımlanmış Şemalar

GraphQL API'leri, güçlü bir şekilde tiplenmiş bir şemaya dayanır. Bu şema, mevcut verilerin yapısını ve gerçekleştirilebilecek işlemleri tanımlar. Bu, mevcut verilerin ne olduğunu ve nasıl erişileceği konusunda netlik sağlar, bu da geliştirici verimliliğini artırabilir ve hataları azaltabilir. Örneğin, ön uç ekipleri, yeni bir REST uç noktasını beklemek yerine, ihtiyaç duydukları verileri tam olarak almak için grafiği keşfedebilir.

Mevcut istemcileri bozmayarak iyileştirme yapabilme

GraphQL'de yeni özellikler eklemek veya mevcut olanları değiştirmek, mevcut entegrasyonları bozmaz; bu, esnek sorgu yapısı sayesinde mümkündür. Bu yetenek, iyileştirmelerin mevcut istemcilerle uyumluluğu bozmadan yapılmasını sağlar.

Güncel Belgeler

GraphQL'in introspeksiyon özelliği sayesinde, belgeler otomatik olarak oluşturulur ve her değişiklikle güncellenir. Bu, geliştiricilere sağlanan tüm bilgilerin güncel olmasını sağlar, entegrasyon sorunlarını ve güncel olmayan belgelerle ilgili destek taleplerini azaltır—bu, REST API belgeleriyle sıkça karşılaşılan bir zorluktur.

Farkı görmek için GraphQL belgelerimizi ve REST belgelerimizi inceleyin.

Bir benzetme 

Bir restoranda, yemekleri tam istediğiniz gibi sipariş etmenize izin veren bir menü ile, yalnızca belirli set yemekleri seçebileceğiniz başka bir restoranı hayal edin. GraphQL, ilk restorana benzer:

  • Tam olarak istediğinizi alın: GraphQL ile tam olarak ihtiyaç duyduğunuz veriyi isteyebilirsiniz, ne fazlası ne de eksiği. Bir yemeğin sadece adını ve fiyatını istiyorsanız, tüm malzeme listesini almak zorunda değilsiniz. REST API'leri ile tüm yemek detaylarını almak zorundasınız ve ihtiyaç duymadığınız kısımları göz ardı etmelisiniz.
  • Özel bir yemek oluşturun: GraphQL API'lerimiz, mevcut malzemeleri kullanarak tam ihtiyaçlarınıza göre bir tür yemek oluşturabileceğiniz bir büfe tarzı restorana benzer şekilde, daha özel çözümler oluşturmak için kolayca birleştirilebilir. Buna karşılık, bir REST API, sepetlerde paketlenmiş önceden yapılmış ürünler sunan bir fırına benzer—sadece önceden oluşturulmuş olanı sipariş edebilirsiniz ve istediğiniz parçayı eve götürme seçeneğiniz yoktur.
  • Daha az bekleme: Tüm ihtiyaç duyduğunuz bilgiyi tek bir istekte alabileceğiniz için, bu, garsonunuza başlangıç, ana yemek ve tatlıyı hepsini birden getirmesini istemek gibidir; kurslar arasında beklemek yerine. Çoğu REST API, farklı bilgi parçalarını almak için birden fazla istek göndermenizi gerektirir.
  • Siparişleri değiştirmek kolay: Uygulamanızın veri ihtiyaçları değişirse, GraphQL ayarlamayı kolaylaştırır. İhtiyacınız olan veriyi almak için sorguyu değiştirirsiniz. REST ile, mutfaktan (arka uç) menüye yeni bir yemek (uç nokta) oluşturmasını beklemeniz gerekebilir, bu da daha fazla zaman alır.

GraphQL, REST API'lerine göre veri alma konusunda daha fazla esneklik, verimlilik ve basitlik sunar, özellikle ihtiyaçlarınız değiştikçe veya büyüdükçe.

Zonos GraphQL'i nasıl kullanıyor 

Son birkaç yılda platformumuzu modernize ederken, Zonos API'miz için yeni işlevsellikleri REST yerine GraphQL kullanarak oluşturma kararı aldı. Bunu yapma kararımız, verilerimizin karmaşık ve birbiriyle bağlantılı olmasıdır; bu, Facebook'un GraphQL'i oluşturmasına yol açan verilere benzer. Bu karmaşıklık, geliştiricilerin verileri alma ve kullanma şekillerinin uygulamalar arasında dramatik bir şekilde değişmesi nedeniyle ölçeklenebilir REST API'leri oluşturmayı zorlaştırır ve REST esnek değildir.

GraphQL, API'mizi uygulayan geliştiricilerin tam olarak ne tür veriye ihtiyaç duyduklarını seçmelerine ve nasıl alacaklarını belirlemelerine olanak tanıyarak bu sorunu şık bir şekilde çözer. Bu, Zonos'un her durum için özel bir çalışma yapmasına (beklerken) gerek kalmadan, geliştiricilerin iş akışlarına entegre etmelerini sağlar.

GraphQL kullanmanın ve platformumuzdaki modernizasyonların birleşik sonucu, API'mizi daha performanslı hale getirmiş, Zonos'u sistemlerinize entegre etmeyi hızlandırmış ve Zonos'un yeni özellikleri daha hızlı sunmasını mümkün kılmıştır.

Daha iyi özellikler

Zonos sürekli olarak yeni özellikler geliştirir ve GraphQL, bu güncellemeleri alan ilk (ve genellikle tek) sistemdir. Buna karşılık, REST API'lerimiz kullanım ömrü sona ermiş olarak kabul edilir ve birçok yeni özelliğimize erişemez.

GraphQL'e özgü özelliklere örnekler:

  • Inclusive pricing
  • Etiketler API'si
  • Yeni Checkout ve Hello
  • API yanıtında kutu boyutları
  • Dashboard raporlama
  • Mümkünse DDP teklifi talep etme yeteneği, ancak DDP bu ülkeye bu hizmet seviyesi için mevcut değilse DDU teklifini döndürme
  • Gümrük vergileri, vergiler ve ücretlerin ayrıntılı dökümü (madde bazında bilgi, belirli ücretler)—Dashboard, GraphQL ile desteklenir ve bu verileri tüm mağazalar için gösterir, ancak REST API yanıtı bu düzeyde ayrıntıyı içermez
  • Test modu (yakında)

Bu sayfa yardımcı oldu mu?