DOCS

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ç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.

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.

REST'i zaten biliyor musunuz? 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.

ÖzellikRESTGraphQL
Uç noktaİstekler farklı eylemler için birden fazla uç noktaya gönderilirTü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ınTam olarak gereken verileri istemek için sorgular kullanın, aşırı almayı veya yetersiz almayı azaltın
Veri değişikliği/eylemlerVerileri 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, landed cost hesaplamak)
Yanıt formatıSabit yanıt formatları, gerekli olsun ya da olmasın tüm önceden tanımlanmış alanları döndürürEsnek 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ı

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ç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:

  • Inclusive pricing
  • 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ümrük vergileri, 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)

Bu sayfa faydalı mıydı?