GraphQL nedir?
GraphQL, karmaşık veri yapıları ve bunların üzerine arayüzler oluşturmak için yüksek derecede uygun olan, API'lerle iletişim kurmak için alternatif bir yoldur. Verileri ayrı, bağımsız parçalar olarak ele almak yerine, GraphQL veri parçalarının birbirine nasıl bağlandığını ve ilişkili olduğunu gösterir, bu da bilgi isteme ve alma işlemini kolaylaştırır.
GraphQL'yi, API'yle sanki doğrudan veritabanıyla konuşuyormuşsunuz gibi konuşmanızı sağlayan bir sorgu dili olarak düşünün. GraphQL kullanmak, veritabanına mümkün olduğunca yaklaşmanızı sağlar; istediğiniz veriyi ve bunu nasıl elde edeceğinizi seçmenize olanak tanıyarak büyük bir performans avantajı sunar.
GraphQL, karmaşık veri yapılarıyla ölçeklendirme sorununu çözmek amacıyla Facebook tarafından oluşturulmuştur. Başarılı bir şekilde benimsenmesinin bir sonucu olarak, gittikçe daha fazla şirket API'leri için GraphQL kullanmanın faydalarını fark etmeye başlamıştır.
Zaten REST biliyorsunuz? GraphQL tanıdık gelecek.
GraphQL API'leriyle çalışmak, düşünebileceğinizden daha kolaydır. REST API'leriyle çalışmaya alışkınsanız, REST'teki temel kavramların GraphQL'ye nasıl çevrildiğini burada bulabilirsiniz.
| Özellik↕ | REST↕ | GraphQL↕ |
|---|---|---|
| Uç nokta | İstekler farklı eylemler için birden fazla uç noktaya gönderilir | Tüm istekler tek bir uç noktaya gönderilir (örneğin, /graphql) |
| Veri alımı | Veri almak için belirli uç noktalarda GET yöntemleri kullanın | Tam olarak gereken verileri istemek için sorgular kullanın, aşırı almayı veya yetersiz almayı azaltın |
| Veri değişikliği/eylemler | Verileri değiştirmek veya işlemek için POST, PUT, PATCH veya DELETE gibi HTTP yöntemleri kullanın. | İşlemleri gerçekleştirmek için mutasyonlar kullanın (örneğin, taraflar oluşturmak, gümrük maliyetlerini hesaplamak) |
| Yanıt formatı | Sabit yanıt formatları, gerekli olsun ya da olmasın tüm önceden tanımlanmış alanları döndürür | Esnek yanıtlar, dahil edilecek tam alanları belirtmeyi sağlar, gereksiz veri aktarımını azaltır (Bu esneklik karmaşık hissederse, basitçe belgelerimizde önceden yazılı sorgu örneklerini kullanarak RESTful bir deneyim elde edin) |
| Veri bağlantısı | İlgili verileri almak için sıklıkla birden fazla istek gereklidir | İç içe sorgular, ilgili verileri tek bir istekte almayı sağlar (örneğin, taraf ayrıntıları ve sevkiyat öğeleri birlikte). Kullanıcılar ayrıca tek bir GraphQL isteğinde birden fazla mutasyonu yönetmek için iş akışları oluşturabilir, karmaşıklığı azaltır ve verimliliği artırır |
GraphQL'nin Avantajları
Daha hızlı yanıtlar
GraphQL, hassas veri alımı, tek uç nokta kullanımı ve geliştirilmiş toplu işleme ve önbelleğe alma özellikleri aracılığıyla daha hızlı yanıtlar sağlar.
Hassas veri alımı
REST'te yaygın bir zorluk, veri aşırı almak veya yetersiz almaktır—ya gereksiz bilgiler alırsınız ya da bir defada ihtiyacınız olan kadarını alamazsınız. GraphQL bunu, tam olarak ihtiyacınız olanı istemeye izin vererek ortadan kaldırır—ne fazla, ne eksik. Bu kesinlik sadece performansı iyileştirmekle kalmaz, aynı zamanda API'yle etkileşimde bulunan kişilerin işlemini de basitleştirir, sistemi daha verimli ve kullanıcı dostu hale getirir.
Bunun nasıl yararlı olduğunun örnekleri:
- Bu, ön yüz geliştiricilerinin UI bileşenleri için ihtiyaç duydukları tam verileri almasına izin vererek, sunucuya gidiş-dönüş sayısını azaltır ve performansı iyileştirir.
- Bir HS kod sınıflandırması, kartonlaştırma, sevkiyat derecelemesi ve bir ödeme sepetindeki öğelerin gümrük maliyeti teklifini almak istediğinizi hayal edin. GraphQL API aracılığıyla entegre olmuşsanız, ihtiyacınız olan her şeyi (ve ihtiyaç duymadığınız hiçbir şeyi) tek bir yanıtta almak için gerekli iş akışlarıyla tek bir çağrı yapabilirsiniz. Buna karşılık, REST API'leriyle önce Classify REST API'sini çağırırsınız, ardından Rating REST API'sini ayrı ayrı çağırırsınız ve son olarak bu sınıflandırma ile sevkiyat derecesini üçüncü çağrınızda Landed Cost REST API'sine eklersiniz. Bu REST API'lerinin tümü döndürebilecekleri her bilgiyi döndürür, bu da yanıttan ihtiyacınız olan veriyi ayrıştırmanızı gerektirir. Bu hız kazancı, alıcı ayrılmadan önce eksiksiz bir gümrük maliyeti teklifini hızlıca döndürmede etkili bir rol oynar.
Tek uç nokta
GraphQL API'lerinin genellikle bir tek uç noktası vardır, REST API'leri ise sıklıkla farklı kaynaklar ve eylemler için birden fazla uç noktaya sahiptir. Bu, API'yi yönetmeyi ve anlamayı daha basit hale getirir.
Toplu işleme ve önbelleğe alma
GraphQL'nin sorguları toplu hale getirme yeteneği ve önbelleğe alma stratejileri için desteği önemli performans iyileştirmelerine yol açar. Bu özellikler ağ ve sunucuların yükünü azaltarak, kullanıcılar için daha hızlı ve daha güvenilir etkileşimlere yol açar.
İyi tanımlanmış şemalar
GraphQL API'leri, güçlü bir şekilde yazılmış bir şema temelinde kurulmuştur. Bu şema, mevcut olan verilerin yapısını ve gerçekleştirilebilecek işlemleri tanımlar. Bu, hangi verilerin kullanılabilir olduğu ve bunlara nasıl erişileceği konusunda netlik sağlar, bu da geliştirici üretkenliğini iyileştirebilir ve hataları azaltabilir. Örneğin, ön yüz ekipleri, yeni bir REST uç noktası için beklemek yerine, tam olarak ihtiyaç duydukları şeyi elde etmek için grafiği keşfedebilir.
Mevcut istemcileri bozmadan geliştirme yapabilme
GraphQL'de yeni özellikleri ekleme veya mevcut olanları değiştirme, esnek sorgu yapısı sayesinde mevcut entegrasyonları bozmaz. Bu yetenek, mevcut istemcilerle uyumluluğu bozmadan iyileştirmelerin yapılabilmesini sağlar.
Güncel belgeler
GraphQL'nin içgözlem özelliğine teşekkürler, 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—REST API belgeleriyle yaygın olarak karşılaşılan bir zorluk.
Farkı görmek için GraphQL belgelerimizi ve REST belgelerimizi inceleyin.
Bir analoji
Tam olarak istediğiniz gibi yemek sipariş etmenizi sağlayan bir menüye sahip bir restoranda olduğunuzu, başka bir restoranda ise yalnızca önceden belirlenmiş yemekler arasından seçim yapabildiğinizi hayal edin. GraphQL, birinci restoran gibidir:
- Tam olarak istediğinizi alın: GraphQL ile tam olarak ihtiyacınız olan verileri isteyebilirsiniz, ne fazla ne eksik. Sadece bir yemeğin adını ve fiyatını istediğinizi, tüm malzeme listesini değil, düşünün. REST API'leriyle tüm yemek ayrıntılarını almak ve ihtiyaç duymadığınız kısımları yok saymak zorundasınız.
- Özel bir yemek oluşturun: GraphQL API'miz, ellerinde zaten bulunan malzemeleri kullanarak tam olarak ihtiyacınız olan şekilde kişiye özel bir yemek oluşturabileceğiniz açık büfe tarzı bir restorana benzer şekilde, daha özel çözümler oluşturmak için kolayca birleştirilebilir. Buna karşılık, bir REST API, yalnızca önceden hazırlanmış ürünleri sepetler halinde paketleyen bir fırına benzer—yalnızca zaten oluşturulmuş olanı sipariş edebilir, istediğiniz tek bir parçayı eve götüremezsiniz.
- Daha az bekleme: İhtiyacınız olan tüm bilgileri tek bir istekte alabildiğiniz için, sanki garsonunuzdan aperatifinizi, ana yemeğinizi ve tatlınızı kurslar arasında beklemek yerine hepsini bir arada getirmesini istemek gibidir. Ç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 bunu kolaylaştırır. İhtiyacınız olan şey için sorguyu değiştirirsiniz. REST'te, mutfak (arka uç) menüye yeni bir yemek (uç nokta) oluşturmak için beklemeniz gerekebilir, bu da daha uzun zaman alır.
GraphQL, özellikle ihtiyaçlarınız değiştiğinde veya büyüdüğünde, REST API'lerinden veri almak için daha fazla esneklik, verimlilik ve basitlik sunar.
Zonos GraphQL'yi Nasıl Kullanıyor
Son birkaç yıl boyunca platformumuzu modernize ederken Zonos, API'miz için REST yerine GraphQL kullanarak yeni işlevsellik oluşturma kararı aldı. Bunu yapmamızın nedeni, verilerimizin, GraphQL'nin oluşturulmasına yol açan Facebook'unkine benzer şekilde karmaşık ve iç içe geçmiş olmasıdır. Bu karmaşıklık, geliştiricilerin veriyi almak ve kullanmak istediği yöntemlerin uygulamalar arasında büyük ölçüde farklılık göstermesi ve REST'in esnek olmaması nedeniyle, ölçeklenebilir REST API'leri oluşturmayı zorlaştırır.
GraphQL, API'mizi uygulayan geliştiricilerin tam olarak hangi veriyi ve nasıl alacaklarını seçip seçebilmelerine olanak tanıyarak bu sorunu net bir şekilde çözer. Bu sayede geliştiriciler, Zonos'un her durum için özel bir çalışma yapmasını beklemek zorunda kalmadan GraphQL'yi kendi iş akışlarına uydurabilir.
GraphQL'nin ve platformumuzdaki modernizasyonların birleşik sonucu, API'mizi daha performant 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ştirmektedir ve bu güncellemeleri ilk (ve genellikle tek) alan GraphQL olur. Buna karşılık, REST API'lerimiz kullanım ömrünü tamamlamış olarak kabul edilir ve birçok yeni özelliğimize erişemez.
GraphQL'ye sınırlı özelliklerin örnekleri:
- Kapsayıcı fiyatlandırma
- Labels API
- Yeni Checkout ve Hello
- API yanıtında kutunun boyutları
- Dashboard raporlaması
- DDP teklifi talep etme yeteneği, mümkünse, ama o ülkede o hizmet seviyesi ile DDP kullanılamıyorsa yine de bir DDU teklifi döndürme
- Görevler, vergiler ve ücretlerin detaylı dökümü (madde düzeyinde bilgiler, belirli ücretler)—Dashboard GraphQL tarafından destekleniyor ve tüm mağazalar için bu veriyi gösteriyor, ama REST API yanıtı bu ayrıntı seviyesini içermiyor
- Test modu (yakında geliyor)
Neden GraphQL
REST yerine GraphQL aracılığıyla entegre olmayı neden önerdiğimizi keşfedin.
Zonos'ta, entegrasyon için iki ana API türü sunuyoruz: GraphQL ve REST. REST API'leri daha uzun süredir var olsa da ve birçok kişiye daha tanıdık gelebilse de, daha fazla esneklik ve daha hızlı inovasyona izin vermek için GraphQL'ye geçiştik. Her ikisi hala desteklenmiş olsa da, bu rehber GraphQL'nin neden sadece entegrasyonlarımızın geleceği değil, aynı zamanda genel olarak entegrasyonların geleceği ve bugün ihtiyaçlarınızı karşılamak için daha güçlü bir araç olduğunu açıklar.