AWS Türkçe Blog

AWS’te API’ları GraphQL ile modernleştirirken nelere dikkat edilmelidir?

Orijinal makale: Link (Lewis Tang)

Önümüzdeki birkaç yıl içinde şirketler, önceki 40 yılda geliştirilenden daha fazla olan 500 milyondan fazla yeni uygulama geliştirecek (bkz. IDC makalesi). API işlemleri yeniliği mümkün kılar. Bunlar, uygulamalara ve mikroservislere “ön kapı” ve uygulama yığınında ayrılmaz bir katmandır. Son yıllarda GraphQL, modern bir API yaklaşımı olarak ortaya çıkmıştır. GraphQL ile şirketler uygulamalarının performansını ve geliştirme ekiplerinin uygulama oluşturma hızını artırabilir. Bu yazıda, GraphQL’in nasıl çalıştığını ve onu AWS servisleriyle entegre etmenin modern uygulamalar oluşturmanıza nasıl yardımcı olabileceğini tartışacağız. AWS’te GraphQL çalıştırma seçeneklerini keşfedeceğiz.

GraphQL nasıl çalışır

E-ticaret uygulamanız için GraphQL ile uygulanan bir API ön ucunuz olduğunu hayal edin. Şekil 1’de gösterildiği gibi, e-ticaret sisteminizin arka ucunda farklı teknolojiler aracılığıyla erişilebilen farklı hizmetler vardır. Örneğin, kullanıcı profili verileri, yüksek düzeyde ölçeklenebilir bir NoSQL tablosunda depolanır. Siparişlere bir REST API aracılığıyla erişilir. Mevcut envanter stoğu, bir AWS Lambda işlevi aracılığıyla kontrol edilir. Ve fiyatlandırma bilgileri bir SQL veritabanındadır.

How GraphQL works

Şekil 1. GraphQL nasıl çalışır

GraphQL kullanmadan, istemci uygulamaları bu servislerin her birine birden çok ayrı çağrı yapmalıdır. Her hizmet farklı API uç noktaları aracılığıyla kullanıma sunulduğundan, istemci tarafından verilere erişmenin karmaşıklığı önemli ölçüde artar. Verileri almak için birden fazla arama yapmanız gerekir. Bazı durumlarda, veri kaynağı size ihtiyaç duymayabileceğiniz veriler de dahil olmak üzere tüm yükü göndereceğinden, verileri fazla getirebilirsiniz. Diğer bazı durumlarda, tek bir veri kaynağı tüm gerekli verilerinize sahip olmayacağından, verilerin tamamını getiremeyebilirsiniz.

Bir GraphQL API, tüm bu farklı hizmetlerden gelen verileri, müşterinin ihtiyaçlarına göre tanımladığı tek bir veri yükünde birleştirir. Örneğin, bir akıllı telefon, bir masaüstü uygulamasından daha küçük bir ekrana sahiptir. Bir akıllı telefon uygulaması daha az veri gerektirebilir. Veriler, birden çok veri kaynağından otomatik olarak alınır. İstemci yalnızca tek bir yapılandırılmış yük görür. Bu yük, Amazon DynamoDB‘den kullanıcı profili verilerini veya Amazon API Gateway‘den sipariş ayrıntılarını alıyor olabilir. Veya AWS Lambda ve Amazon Aurora‘dan gelen envanter kullanılabilirliği ve fiyat verileriyle belirli alanların enjeksiyonunu içerebilir.

GraphQL ile ön uç API’larını modernleştirirken, ön uç geliştiricilerinizin entegrasyon için yeni API’lar oluşturması için arka uç hizmet ekiplerinin beklemesine gerek olmadığından uygulamaları daha hızlı oluşturabilirsiniz. GraphQL, tek bir API kullanarak birden çok veri kaynağından gelen verilerle etkileşim kurarak veri erişimini basitleştirir. Bu, API isteklerinin ve ağ trafiğinin sayısını azaltarak uygulama performansının artmasını sağlar. Ayrıca, GraphQL abonelikleri, arka uç ve istemci arasında iki yönlü iletişim sağlar. Abone olunan istemcilere gerçek zamanlı olarak veri güncellemelerinin yayınlanmasını destekler. Spor skorlarını güncelleme, teklif verme durumları ve daha fazlası gibi kullanım örnekleriyle gerçek zamanlı olarak ilgi çekici uygulamalar oluşturabilirsiniz.

AWS’te GraphQL çalıştırma seçenekleri

AWS’te GraphQL uygulamasını çalıştırmak için, AWS AppSync kullanılarak tamamen AWS’te yönetilen ve kendi yönettiğiniz GraphQL olmak üzere iki ana seçenek vardır.

I. AWS AppSync kullanılarak tamamen yönetilen

GraphQL’i çalıştırmanın en basit yolu, tam olarak yönetilen bir hizmet olan AWS AppSync’i kullanmaktır. AWS AppSync, Amazon DynamoDB gibi veri kaynaklarına güvenli bir şekilde bağlanmanın ve GraphQL API’ları geliştirmenin ağır yükünün üstesinden gelir. Ortak GraphQL API kalıplarını uygulayan kod şablonlarını seçerek bu veri kaynaklarına karşı iş mantığı yazabilirsiniz. API’larınız, performansı artırmak için önbelleğe alma gibi diğer AWS AppSync işlevleriyle de etkileşim kurabilir. Gerçek zamanlı güncellemeleri desteklemek için abonelikleri ve çevrimdışı cihazları senkronize halde tutmak için istemci tarafı veri depolarını kullanın. AWS AppSync, çeşitli API istek yüklerini desteklemek için otomatik olarak ölçeklenir. AWS AppSync özellikleri sayfasından daha fazla ayrıntı bulabilirsiniz.

AWS AppSync in an ecommerce system implementation

Şekil 2. Bir e-ticaret sistemi uygulamasında AWS AppSync

Bir e-ticaret sisteminde AWS AppSync ile bu GraphQL uygulamasına daha yakından bakalım. Şekil 2’de, istenen GraphQL API’ının tiplerini ve yeteneklerini tanımlamak için bir şema oluşturulmuştur. Şemayı bir Resolver (Çözümleyici) işlevine bağlayabilirsiniz. Şema, mevcut veri kaynaklarını yansıtmak için oluşturulabilir veya AWS AppSync, şema tanımına göre otomatik olarak tablolar oluşturabilir. Arka uç veri kaynaklarını görüntülemeden veri keşfi için GraphQL özelliklerini de kullanabilirsiniz.

Bir şema tanımı oluşturulduktan sonra, bir AWS AppSync istemcisi, sorgu işlemi gibi bir işlem isteğiyle yapılandırılabilir. İstemci, işlem talebini bir kimlik bağlamı ve kimlik bilgileriyle birlikte GraphQL Proxy‘ye gönderir. GraphQL Proxy, bu isteği önceden yapılandırılmış AWS veri hizmetlerine karşı istek yükünü eşleyen ve başlatan Resolver’a iletir. Bunlar, kullanıcı profili için bir Amazon DynamoDB tablosu, envanter hizmeti için bir AWS Lambda işlevi ve daha fazlası olabilir. Resolver, tek bir API çağrısı içinde bu hizmetlerden birine veya tümüne çağrı başlatır. Bu, CPU döngülerini ve ağ bant genişliği ihtiyaçlarını en aza indirir. Resolver daha sonra yanıtı istemciye döndürür. Ek olarak, istemci uygulaması talep üzerine koddaki veri gereksinimlerini değiştirebilir. AWS AppSync GraphQL API, verilere yönelik istekleri dinamik olarak eşleyerek daha hızlı prototip oluşturma ve geliştirme sağlar.

II. Kendi Yönettiğiniz GraphQL

Belirli bir açık kaynaklı proje seçme esnekliği istiyorsanız, kendi GraphQL API katmanınızı çalıştırmayı seçebilirsiniz. Apollo, graphql-ruby, Juniper, gqlgen ve Lacinia bazı popüler GraphQL uygulamalarıdır. GraphQL açık kaynak uygulamalarını çalıştırmak için AWS Lambda’dan veya Amazon Elastic Container Service (ECS) ve Amazon Elastic Kubernetes Services (EKS) gibi konteyner hizmetlerinden yararlanabilirsiniz. Bu size API’ınızın operasyonel özelliklerine ince ayar yapma yeteneği verir.

AWS Lambda’da bir GraphQL API katmanı çalıştırırken, otomatik ölçeklendirmenin sunucusuz avantajlarından, yalnızca kullandığınız kadar ödeme yaparak ve sunucularınızı yönetmek zorunda kalmadan yararlanabilirsiniz. Yalnızca Amazon Virtual Private Cloud’unuzdan (VPC) erişilebilen Amazon ECS, EKS veya AWS Lambda kullanarak özel bir GraphQL API oluşturabilirsiniz. Apollo GraphQL açık kaynak uygulamasıyla, birden çok mikroservisten GraphQL API’larını Şekil 3’te gösterildiği gibi tek bir API’da birleştirmenize olanak tanıyan bir Federated GraphQL oluşturabilirsiniz. AWS AppSync ile Apollo GraphQL Federation gönderisi, bir AWS AppSync API’ının bir Apollo Federation ağ geçidiyle nasıl entegre edileceğine dair somut bir örnek gösterir. Spesifikasyon uyumlu sorgular ve yönergeler kullanır.

Apollo GraphQL implementation on AWS Lambda

Şekil 3. AWS Lambda’da Apollo GraphQL uygulaması

Kendi yönettiğiniz GraphQL uygulamasını seçerken, veri kaynaklarını bağlamak için iş dışı mantık kodu yazmaya zaman harcamanız gerekir. Yetkilendirme, kimlik doğrulama uygulamanız ve diğer ortak işlevleri entegre etmeniz gerekir. Bu, performansı artırmak için önbellekler, gerçek zamanlı güncellemeleri desteklemek için abonelikler ve çevrimdışı cihazları senkronize tutmak için istemci tarafı veri depoları olabilir. Bu sorumluluklar nedeniyle, uygulamanın iş mantığına odaklanmak için daha az zamanınız olur.

Benzer şekilde, açık kaynaklı bir GraphQL uygulamasının arka uç geliştirme ekipleri ve API operatörleri, kendi GraphQL sunucularını sağlamalı ve bakımını yapmalıdır. Sunucusuz bir modelde bile API geliştiricilerinin ve operatörlerinin API platform hizmetini izleme, performans ayarlama ve sorun gidermeden sorumlu olduğunu unutmayın.

Sonuç

API’ları GraphQL ile modernize etmek, ön uç uygulamanıza bir API çağrısı ile birden çok veri kaynağından yalnızca ihtiyaç duyulan verileri getirme yeteneği sağlar. GraphQL, API yönetimini basitleştirdiği için modern mobil ve web uygulamalarını daha hızlı oluşturabilirsiniz. AWS Lambda, Amazon ECS ve Amazon EKS’te ihtiyaçlarınıza en uygun şekilde açık kaynaklı bir GraphQL uygulamasını çalıştırma esnekliğine sahipsiniz. AWS AppSync ile GraphQL’i hızlı bir şekilde kurabilir ve iş dışı API mantık kodunun miktarını azaltarak geliştirme hızınızı artırabilirsiniz.