gRPC ile REST Arasındaki Fark Nedir?
gRPC ve REST, API tasarlamanın iki yoludur. API, iki yazılım bileşeninin bir dizi tanım ve protokol aracılığıyla birbiriyle iletişim kurmasına olanak tanıyan bir mekanizmadır. gRPC'de bir bileşen (istemci), başka bir yazılım bileşenindeki (sunucu) belirli işlevleri çağırır. REST'te istemci, işlevleri çağırmak yerine sunucudaki verileri ister veya günceller.
gRPC nedir?
RPC nedir?
RPC'de istemci-sunucu iletişimi, istemci API isteklerinin yerel birer işlem olduğu ya da isteğin dahili sunucu kodu olduğu senaryolara benzer şekilde çalışır.
RPC'de istemci, sunucuda uzak çağrıları her zaman dinleyen bir işleme istek gönderir. İstekte, çağrılacak sunucu işlevi ve varsa iletilecek parametreler bulunur. Bir RPC API, altta yatan veri alışverişi mekanizması olarak HTTP, TCP veya UDP gibi bir protokol kullanır.
gRPC'nin RPC'den farkı nedir?
gRPC, geleneksel RPC'yi birkaç optimizasyonla birlikte uygulayan bir sistemdir. Örneğin gRPC, veri iletimi için Protokol Arabellekleri ve HTTP 2 kullanır.
Ayrıca veri alışverişi mekanizmasını geliştiriciden soyutlar. Örneğin, yaygın olarak kullanılan bir başka RPC API uygulaması olan OpenAPI, geliştiricilerin RPC kavramlarını HTTP protokolüyle eşleştirmesini gerektirir. Ancak gRPC, altta yatan HTTP iletişimini soyutlar. Bu optimizasyonlar sayesinde gRPC, diğer RPC uygulamalarına kıyasla daha hızlı, uygulaması daha kolay ve daha web dostudur.
REST nedir?
REST, yazılım bileşenleri arasında veri alışverişi yapmak için bir dizi kural tanımlayan bir yazılım mimarisi yaklaşımıdır. Web'deki standart iletişim protokolü olan HTTP'ye dayanmaktadır. RESTful API'ler; oluşturma, okuma, güncelleme ve silme işlemleri için POST, GET, PUT ve DELETE gibi HTTP fiilleri aracılığıyla istemci ile sunucu arasındaki iletişimi yönetir. Sunucu tarafı kaynağı, uç nokta olarak bilinen bir URL tarafından tanımlanır.
REST şu şekilde çalışır:
- İstemci, sunucuda bir kaynak oluşturmak, değiştirmek veya silmek için istekte bulunur
- Kaynak uç noktasını içeren bu istek, aynı zamanda ek parametreler de barındırabilir
- Sunucu yanıt verir ve işlem tamamlandıktan sonra tüm kaynağı istemciye geri döndürür
- Yanıt, JSON biçimindeki verileri ve durum kodlarını içerir
REST yönergeleri kullanılarak oluşturulan API'lere RESTful API'ler veya REST API'ler adı verilir.
Kuruluşlar neden gRPC ve REST kullanır?
gRPC ve REST, API geliştirmeye yönelik iki farklı yaklaşımdır.
Bir API, bir restorandan menü aracılığıyla yemek siparişi vermeye benzer şekilde çalışır. Herhangi bir restoranda, bir müşteri (müşteri), sabit bir dizi yemeğin bulunduğu menüden (API) yemek sipariş edebilir. Bu durum, mutfağa (sunucu) iletilir ve mutfak da istenen yemeği hazırlayıp müşteriye gönderir. Müşterinin mutfağın siparişi nasıl hazırladığını bilmesi gerekmez. Karşılığında ne geleceğini bilmesi yeterlidir. Menü biçimlerinin standartlaştırılması sayesinde, hem müşteriler hem de mutfaklar bu menüleri nasıl kullanacaklarını bilir.
API'ler olmadan, farklı uygulamaların veya yazılım hizmetlerinin nasıl iletişim kuracağına dair ortak bir anlaşma olmazdı. İki ayrı uygulamanın programcıları, her seferinde veri alışverişini nasıl yürüteceklerini belirlemek için birbirleriyle konuşmak zorunda kalırdı.
Her mimarinin bir kuruluş içinde daha uygun olabileceği farklı kullanım örnekleri bulunabileceğinden, API mimarilerinin gRPC ve REST gibi farklı türleri mevcuttur. Bir API tasarımcısı, tercih ettiği istemci-sunucu mimarisini sistem gereksinimlerine göre seçmelidir.
gRPC ile REST arasındaki benzerlikler nelerdir?
REST ve gRPC, API mimari yaklaşımları olarak özünden gelen bazı benzerlikleri paylaşır.
Veri alışverişi mekanizması
Her ikisi de iki yazılım bileşeninin, yani istemcinin ve sunucunun, ortak bir kurallar kümesine dayalı olarak iletişim kurmasına ve veri alışverişi yapmasına izin verir. Bu kurallar, her bir yazılım bileşeninin dahili olarak nasıl çalıştığına bakılmaksızın geçerlidir.
HTTP tabanlı iletişim
Her ikisi de verileri, web'in tercih edilen verimli iletişim protokolü olan HTTP istek-yanıt mekanizması aracılığıyla iletir. Bununla birlikte, gRPC'de bu husus geliştiriciden gizlenirken, REST'te daha belirgindir.
Uygulama esnekliği
Hem REST'i hem de gRPC'yi geniş bir yelpazedeki programlama dillerinde uygulayabilirsiniz. Bu kalite, her ikisini de programlama ortamlarında oldukça taşınabilir hale getirir. Böylece, neredeyse evrensel destekle en uygun birlikte çalışabilirlik elde edilir.
Ölçeklenebilir, dağıtılmış sistemlere uygunluk
Hem gRPC hem de REST aşağıdakileri kullanır:
- İstemciye ve sunucuya işlemleri kesintiye uğratmadan iletişim kurma imkanı tanıyan zaman uyumsuz iletişim
- Sunucunun istemci durumunu hatırlamasını gerektirmeyen durum bilgisiz tasarım
Bu sayede geliştiriciler çok sayıda eş zamanlı isteğe yanıt verebilen, hataya dayanıklı sistemler oluşturmak için gRPC ve REST kullanabilir. Birden çok istemciyle ölçeklenebilir, dağıtılmış sistemler oluşturabilirsiniz.
Mimari ilkeleri: gRPC ve REST
REST ve gRPC benzer bir işlev sunarken, temel modellerin mimarileri önemli ölçüde farklılık gösterir.
İletişim modeli
İstemci bir REST API kullanarak bir sunucuya tek bir REST API isteği gönderir ve ardından sunucu yanıt olarak tek bir yanıt gönderir. İstemci, işlemlere devam etmeden önce sunucunun yanıt vermesini beklemelidir. Bu mekanizma bir istek-yanıt modelidir ve tekli bir veri bağlantısıdır (bire bir).
Buna karşılık gRPC'de, bir istemci sunucuya, sunucudan bir veya birden çok yanıtla sonuçlanabilecek bir veya daha fazla API isteği gönderebilir. Veri bağlantıları tekli (tek kaynaktan tek alıcıya), sunucu akışı (tek kaynaktan çok alıcıya), istemci akışı (çok kaynaktan tek alıcıya) veya çift yönlü akış (çok kaynaktan çok alıcıya) olabilir. Bu mekanizma bir istemci-yanıt iletişim modelidir ve gRPC'nin HTTP 2'ye dayalı olması sayesinde mümkündür.
Sunucuda çağrılabilir işlemler
Bir gRPC API'de çağrılabilir sunucu işlemleri, işlevler veya prosedürler olarak da bilinen hizmetler tarafından tanımlanır. gRPC istemcisi bu işlevleri çağırırken, sizin bir uygulama içinde bir işlevi dahili olarak çağırmanıza benzer bir yol izler. Buna hizmet odaklı tasarım adı verilir. İşte bir örnek:
createNewOrder(customer_id, item_id, item_quantity) -> order_id
REST'te, istemcinin bir URL tarafından tanımlanan sunucu kaynaklarında kullanabileceği sınırlı sayıda HTTP istek fiili vardır. İstemci, kaynağın kendisini çağırır. Buna varlık odaklı tasarım adı verilir. Varlık odaklı tasarım, nesne odaklı programlama yöntemleriyle iyi uyum sağlar. İşte bir örnek:
POST /orders <headers> (customer_id, item_id, item_quantity) -> order_id
gRPC API'ler varlık odaklı bir yaklaşımla tasarlamanız mümkün olmakla birlikte, bu sistemin kendisinin bir kısıtlaması değildir.
Veri alışverişi biçimi
Bir REST API ile, yazılım bileşenleri arasında iletilen veri yapıları tipik olarak JSON veri alışverişi biçiminde ifade edilir. XML ve HTML gibi diğer veri biçimlerinin iletilmesi de mümkündür. JSON, okunması kolay ve esnek olan ancak serileştirilmesi ve bir programlama diline çevrilmesi gereken bir biçimdir.
Buna karşılık, gRPC varsayılan olarak Protokol Arabellekleri (Protobuf) biçimini kullanır ancak yerel JSON desteği de sunar. Sunucu, bir proto-belirtim dosyasında Protokol Arabelleği arabirim açıklama dilini (IDL) kullanarak bir veri yapısı tanımlar. gRPC daha sonra yapıyı serileştirerek ikili biçime, devamında ise serileştirmeden çıkararak belirtilen programlama diline dönüştürür. Bu mekanizma, iletim sırasında sıkıştırılmayan JSON kullanımına kıyasla daha hızlıdır. Protokol Arabellekleri, JSON ile kullanılan bir REST API'nin aksine, insan tarafından okunabilir değildir.
Diğer temel farklılıklar: gRPC ve REST
Diğer temel farklılıklar: gRPC ve REST
Mimari tarzın ötesinde, gRPC ve REST'in başka içsel farklılıkları vardır.
İstemci-sunucu ilişkilendirmesi
REST, gevşek ilişkilendirilmiştir. Bu da istemci ve sunucunun karşılıklı uygulamaları hakkında hiçbir şey bilmelerine gerek olmadığı anlamına gelir. Bu gevşek ilişkilendirme, API'nin zaman içinde gelişmesini kolaylaştırır. Bunun nedeni, sunucu tanımlarındaki bir değişikliğin istemcide mutlaka bir kod değişikliği gerektirmemesidir.
gRPC, sıkı ilişkilendirilmiştir. Bu da istemci ve sunucunun aynı proto dosyasına erişimi olması gerektiği anlamına gelir. Dosyada yapılan tüm güncellemeler hem sunucuda hem de istemcide güncellemeler gerektirir.
Kod oluşturma
gRPC, istemci tarafı ve sunucu tarafı yerel kod oluşturma özelliklerinin entegre bir seçimini sunar. Protokol Arabelleği derleyicisi olan protoc nedeniyle birden fazla dilde kullanılabilirler. Proto dosyasında yapıyı tanımladıktan sonra gRPC, istemci tarafı ve sunucu tarafı kodunu oluşturur. Kod oluşturma, API geliştirme sürecinin daha az zaman almasını sağlar.
Öte yandan, REST herhangi bir yerleşik kod oluşturma mekanizması sunmaz. Dolayısıyla bu özelliğe ihtiyaç duyan geliştiricilerin ek üçüncü taraf araçları kullanmaları gerekir.
Çift yönlü akış
gRPC çift yönlü akış iletişimi sunar. Bu, hem istemcinin hem de sunucunun tek bir bağlantı üzerinde aynı anda birden fazla istek ve yanıt gönderip alabileceği anlamına gelir.
REST bu özelliği sunmaz.
Kullanım zamanı: gRPC ve REST
REST, mevcut durumda web hizmetleri ve mikro hizmet mimarileri için en popüler API mimarisidir. REST'in popülaritesi; basit uygulaması ve veri yapısı eşleştirmesi, okunabilirliği ve esnekliğinden kaynaklanmaktadır. Yeni programcıların, ister web hizmetleri geliştirmeye ister dahili mikro hizmetlere yönelik olsun, uygulamaları için RESTful API'ler geliştirmeye başlaması kolaydır.
REST API için kullanım örnekleri şunlardır:
- Web tabanlı mimariler
- Dış kullanıcılar tarafından anlaşılma kolaylığı için halka dönük API'ler
- Basit veri iletişimleri
REST'in aksine gRPC, geliştiricilerin mikro hizmet mimarileri için dağıtılmış veri merkezleri genelinde yüksek performanslı API'ler oluşturmasına olanak tanır. Gerçek zamanlı akış ve büyük veri yükleri gerektiren dahili sistemler için daha uygundur. gRPC ayrıca, API'nin zaman içinde değişme olasılığı düşük olduğunda, birden çok programlama dilinden oluşan mikro hizmet mimarileri için de iyi bir seçimdir.
gRPC API bu kullanım örnekleri için daha iyi bir seçimdir:
- Yüksek performanslı sistemler
- Yüksek hacimli veri yükleri
- Gerçek zamanlı uygulamalar veya akış uygulamaları
Web yazılımı geliştirme hakkında not
HTTP temel web protokolü olsa da web tarayıcıları ve web sunucuları genelinde farklı benimsenme dereceleriyle HTTP'nin farklı sürümleri mevcuttur.
gRPC API daima HTTP 2 kullanır ve REST API genellikle HTTP 1.1 kullanır. Bu da aynı HTTP protokolü değildir. HTTP 2 artık ortak bir web protokolü olmasına rağmen, HTTP 1.1'den farklı olarak evrensel tarayıcı desteğine sahip değildir. Bu sınırlı tarayıcı desteği, web uygulamalarını desteklemek isteyen geliştiriciler için gRPC'yi daha az çekici bir seçenek haline getirebilir.
Farkların özeti: gRPC ve REST
gRPC API |
REST API |
|
Bu nedir? |
Uzaktan Yordam Çağrısı (RPC) istemci-sunucu iletişim modeline göre API'ler oluşturup kullanmaya yönelik bir sistemdir. |
İstemci ile sunucu arasında yapılandırılmış veri alışverişini tanımlayan bir dizi kuraldır. |
Tasarım yaklaşımı |
Hizmet odaklı tasarım. İstemci, sunucudan sunucu kaynaklarını etkileme ihtimali bulunan bir hizmet veya işlev gerçekleştirmesini ister. |
Varlık odaklı tasarım. İstemci, sunucudan kaynaklar oluşturmasını, paylaşmasını veya değiştirmesini ister. |
İletişim modeli |
Tekli, tek sunucudan çok istemciye, tek istemciden çok sunucuya ve çok istemciden çok sunucuya gibi birden çok seçenek. |
Tekli. Tek bir istemci tek bir sunucuyla iletişim kurar. |
Uygulama |
Çalışması için hem istemci hem de sunucu tarafında gRPC yazılımı gerekir. |
İstemci ve sunucu tarafında, ortak bir yazılım gerekmeden çok çeşitli biçimlerde uygulayabilirsiniz. |
Veri erişimi |
Hizmet (işlev) çağrıları. |
Kaynakların tanımlanması için URL biçiminde birden fazla uç nokta. |
Döndürülen veri |
Protokol Arabelleği dosyasında tanımlandığı gibi hizmetin sabit dönüş türünde. |
Sunucu tarafından tanımlandığı gibi sabit bir yapıda (tipik olarak JSON). |
İstemci-sunucu ilişkilendirmesi |
Sıkı ilişkilendirilmiş. Hem istemci hem de sunucu, veri biçimini tanımlayan aynı Protokol Arabelleği dosyasına ihtiyaç duyar. |
Gevşek ilişkilendirilmiş. İstemci ve sunucu dahili ayrıntılardan haberdar değildir. |
Otomatik kod oluşturma |
Yerleşik özellik. |
Üçüncü taraf araçları gerektirir. |
Çift yönlü akış |
Mevcut. |
Mevcut değil. |
En uygun olduğu alanlar: |
Yüksek performanslı veya yoğun veri kullanan mikro hizmet mimarileri. |
Kaynakların iyi tanımlandığı basit veri kaynakları. |
AWS, gRPC ve REST gereksinimlerinizi nasıl destekleyebilir?
Amazon Web Services (AWS), API tasarımcılarının API tabanlı modern uygulamalar ve hizmetler oluşturmasına, çalıştırmasına ve yönetmesine yardımcı olacak bir dizi hizmet ve araca sahiptir. Daha fazla bilgi için AWS'de modern uygulamalar oluşturma hakkında bilgi edinin.
Aşağıda, API gereksinimlerinizi destekleyebilecek AWS tekliflerine örnekler verilmiştir:
- Amazon API Ağ Geçidi, geliştiricilerin API'leri uygun ölçekte oluşturmasına, yayınlamasına ve yönetmesine olanak tanır. API Ağ Geçidi ile, container'lı mikro hizmet mimarileri ve web uygulamaları için optimize edilmiş RESTful API'ler oluşturabilirsiniz.
- Esnek Yük Dengeleme (ELB), uygulama ölçeklenebilirliğini artırmak için ağ trafiğini dağıtır. gRPC trafiğini, mikro hizmetler arasında veya gRPC özellikli istemci ve hizmetler arasında yönlendirebilir ve bunlar arasındaki yükü dengeleyebilir. Bu, müşterilerin istemci veya hizmetleri üzerinde hiçbir temel altyapı değişikliği yapmadan mimarilere sorunsuz şekilde gRPC trafik yönetimi eklenmesine olanak tanır.
- Amazon Sanal Özel Bulut (Amazon VPC) Lattice, hizmetleriniz arasındaki iletişimleri tutarlı şekilde bağlayan, izleyen ve koruma altına alan bir uygulama ağ hizmetidir. Yüksek bant genişliğine sahip HTTP, HTTPS ve gRPC iş yüklerini desteklemek için işlem ve ağ kaynaklarını otomatik olarak ölçeklendirin.
Hemen bir hesap oluşturarak AWS'de gRPC ve REST'i kullanmaya başlayın.