RPC ile REST arasındaki fark nedir?

Uzaktan Yordam Çağrısı (RPC) ve REST, API tasarımındaki iki mimari stildir. API'ler, iki yazılım bileşeninin belirli tanımlar ve protokoller aracılığıyla birbiriyle iletişim kurmasına olanak tanıyan mekanizmalardır. Yazılım geliştiriciler, işlevleri gerçekleştirmek için önceden geliştirilmiş veya üçüncü taraf bileşenlerini kullanır ve böylece her şeyi sıfırdan yazmak zorunda kalmazlar. RPC API'ler, geliştiricilerin harici sunuculardaki uzak işlevleri yazılımlarındaki yerel işlevlermiş gibi çağırmalarına olanak tanır. Örneğin, başka bir sohbet uygulamasındaki mesajlaşma işlevlerini uzaktan çağırarak uygulamanıza sohbet işlevi ekleyebilirsiniz. Buna karşılık, REST API'ler uzak bir sunucuda belirli veri işlemlerini gerçekleştirmenize olanak tanır. Örneğin, uygulamanız REST API'leri kullanarak uzak bir sunucuya çalışan verilerini ekleyebilir veya bunları değiştirebilir.

API'ler hakkında bilgi edinin »

RESTful API'ler hakkında bilgi edinin »

RPC ile REST arasındaki benzerlikler nelerdir?

Hem Uzaktan Yordam Çağrısı (RPC) hem de REST, API'ler tasarlamanın yolları arasındadır. API'ler modern web tasarımı ve diğer dağıtılmış sistemlerde olmazsa olmazdır. Birbirinden ayrı ve dağıtılmış iki uygulama veya hizmete, diğerinin çalışma mekanizmasını bilmeden iletişim kurma olanağı tanırlar. Bu iki uygulama veya hizmet, küçük bir veri alışverişi dışında birbiriyle neredeyse tamamen alakasız olabilir. 

API'ler bir programın arka ucu (mantık bileşeni) ile programın ön ucu (görüntüleme bileşeni) arasında iletişim kurulması için de yaygın bir mekanizmadır. Web sayfalarını ve web uygulamalarını sıkıca iç içe geçmiş bir entegrasyon yerine API'lerle tasarladığınızda, ölçeklendirme ve değiştirme süreçlerini çok daha az kodu yeniden yazarak tamamlayabilirsiniz.

RPC ve REST API'ler arasındaki diğer benzerlikleri daha sonra ele alacağız.

Soyutlama

Ağ iletişimi, API'lerin temel amacı olsa da alt düzey iletişimlerin kendileri API geliştiricilerinden soyutlanmıştır. Bu, geliştiricilerin teknik uygulama yerine işleve odaklanmalarını sağlar.

İletişim

Hem REST hem de RPC, temel protokol olarak HTTP'yi kullanır. RPC ve REST'teki en popüler mesaj biçimleri JSON ve XML'dir. JSON, okunabilirliği ve esnekliği nedeniyle tercih edilir.

Diller arası uyumluluk

Geliştiriciler, seçtikleri herhangi bir dilde RESTful veya RPC API'yi uygulayabilir. API'nin ağ iletişim öğesi RESTful veya RPC arabirim standardına uygun olduğu sürece, kodun geri kalanını herhangi bir programlama dilinde yazabilirsiniz.

Mimari ilkeleri: RPC ve REST

Uzaktan Yordam Çağrısı (RPC) söz konusu olduğunda istemci, bir sunucuda uzak bir işlev (yöntem veya yordam olarak da bilinir) çağrısı yapar. Genellikle bu çağrı sırasında sunucuya bir veya birden fazla veri değeri iletilir.

Buna karşılık, REST istemcisi sunucudan belirli bir sunucu kaynağı üzerinde bir eylem gerçekleştirmesini ister. Eylemler yalnızca oluşturma, okuma, güncelleme ve silme (CRUD) ile sınırlıdır ve HTTP fiilleri ya da HTTP yöntemleri olarak aktarılır.

RPC işlevlere veya eylemlere odaklanırken, REST kaynaklara ya da nesnelere odaklanır.

RPC ilkeleri

Sırada, RPC sistemlerinin çoğunlukla uyduğu bazı ilkelerden bahsedeceğiz. Ancak bu ilkeler REST gibi standartlaştırılmamıştır.

Uzaktan çağrı

İstemci, uzak sunucudaki bir işleve bir RPC çağrısı yapar. Bu çağrı, istemciye yerel olarak yapılmış gibi işlem görür.

Parametrelerin iletimi

İstemci genellikle parametreleri tıpkı yerel bir işlevde olduğu gibi bir sunucu işlevine gönderir.

Vekiller

İşlev vekilleri hem istemcide hem de sunucuda bulunur. İstemci tarafında, işlev çağrısını yapar. Sunucuda, işlevin kendisini çağırır.

REST ilkeleri

REST ilkeleri standartlaştırılmıştır. Bir REST API'nin RESTful olarak sınıflandırılması için bu ilkelere uyması gerekir.

İstemci-sunucu

REST'in istemci-sunucu mimarisi, istemcileri ve sunucuları ayrıştırır. Her birine bağımsız sistemler olarak davranır.

Durum bilgisiz

Sunucu, istemci istekleri arasında istemci durumunun kaydını tutmaz.

Önbelleğe alınabilir

İstemci veya aracı sistemler, istemcinin yanıtın önbelleğe alınabileceğini belirtip belirtmediğine bağlı olarak sunucu yanıtlarını önbelleğe alabilir.

Katmanlı sistem

İstemci ile sunucu arasında aracılar bulunabilir. Hem istemci hem de sunucu bunlar hakkında hiçbir bilgiye sahip olmaz ve birbirine doğrudan bağlıymış gibi çalışır.

Tek biçimli arabirim

REST API ile istemci ve sunucu, standartlaştırılmış bir dizi talimat ve mesajlaşma biçimi aracılığıyla iletişim kurar. Kaynaklar URL'leriyle tanımlanır ve bu URL, REST API uç noktası olarak bilinir.

Çalışma yöntemleri: RPC ve REST

Uzaktan Yordam Çağrısı'nda (RPC), istemci belirli bir işlevi ada göre çağırmak için HTTP POST kullanır. İstemci tarafı geliştiricileri, RPC'nin çalışması için işlev adını ve parametreleri önceden bilmelidir.

REST'te, istemci ve sunucular seçenekleri gerçekleştirmek için GET, POST, PATCH, PUT, DELETE ve OPTIONS gibi HTTP fiillerini kullanır. Geliştiricilerin yalnızca sunucu kaynak URL'lerini bilmeleri gerekir ve tek tek işlev adlarıyla ilgilenmeleri gerekmez.

Aşağıdaki tabloda, istemcinin RPC ve REST'te benzer eylemleri gerçekleştirmek için kullandığı kod türü gösterilmektedir.

Eylem

RPC

REST

Yorum

Ürün listesine yeni bir ürün ekleme

POST /addProduct HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"name": "T-Shirt", "price": "22.00", "category": "Clothes"}

POST /products HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"name": "T-Shirt", "price": "22.00", "category": "Clothes"}

RPC, POST'u işlevde, REST ise POST'u URL'de kullanır.

Bir ürünün ayrıntılarını alma

POST /getProduct HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"productID": "123”}

GET /products/123 HTTP/1.1

HOST: api.example.com

RPC, POST'u işlevde kullanır ve parametreyi JSON nesnesi olarak geçirir. REST, GET'i URL'de kullanır ve parametreyi URL'de geçirir.

Bir ürünün fiyatını güncelleme

POST /updateProductPrice HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"productId": "123", "newPrice": "20.00"}

PUT /products/123 HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"price": "20.00"}

RPC, POST'u işlevde kullanır ve parametreyi JSON nesnesi olarak geçirir. REST, PUT'u URL'de kullanır ve parametreyi URL'de ve JSON nesnesi olarak geçirir.

Bir ürünü silme

POST /deleteProduct HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"productId": "123""}

DELETE /products/123 HTTP/1.1

HOST: api.example.com

RPC, POST'u işlevde kullanır ve parametreyi JSON nesnesi olarak geçirir. REST, DELETE'i URL'de kullanır ve parametreyi URL'de geçirir.

Temel farklar: RPC ve REST

Uzaktan Yordam Çağrısı (RPC) ve REST, internet üzerinden iletişim için birbiriyle uyumlu istemci ve sunucu sistem arabirimlerini tasarlamanın iki ayrı yoludur. Bununla birlikte; yapı, uygulama ve altta yatan ilkeler farklıdır. REST ile tasarlanan sistemler RESTful API'ler olarak bilinirken, RPC ile tasarlanan sistemler RPC API'ler olarak bilinir.

Daha sonra, diğer farklılıklardan da bahsedeceğiz.

Geliştirilme zamanı

RPC, 1970'lerin sonlarında ve 1980'lerin başında geliştirilirken, REST ilk olarak 2000 yılında bilgisayar bilimcisi Roy Fielding tarafından icat edilen bir terimdi.

Operasyon biçimi

Bir REST API'de, HTTP yöntemleri nedeniyle standartlaştırılmış bir dizi sunucu işlemi mevcuttur. RPC API'lerde bu işlemler yoktur. Bazı RPC uygulamaları, standartlaştırılmış operasyonlar için bir çerçeve sağlar.

Veri iletme biçimi

REST, her türlü veri biçimini ve aynı API içinde JSON ve XML gibi birden çok biçimi iletebilir.

RPC API'lerde ise veri biçimi sunucu tarafından seçilir ve uygulama sırasında sabittir. Belirli JSON RPC veya XML RPC uygulamalarınız olabilir ve istemciye esneklik sunulmaz.

Durum

API'ler bağlamında durum bilgisiz terimi, sunucu tarafından istemcinin önceki etkileşimleri hakkında herhangi bir bilginin depolanmadığı bir tasarım ilkesini ifade eder. Her API isteği bağımsız olarak ele alınır ve sunucu, isteği işlemek için istemciyle ilgili olarak depolanmış herhangi bir durum bilgisine ihtiyaç duymaz.

REST sistemleri her zaman durum bilgisiz olmalıdır. RPC sistemleri ise tasarıma bağlı olarak durum bilgili veya durum bilgisiz olabilir.

Kullanım zamanı: RPC ve REST

Uzak Yordam Çağrısı (RPC) genellikle bir eylem sonucu gerektiren bir sunucudaki uzak işlevleri çağırmak için kullanılır. Karmaşık hesaplamalara ihtiyaç duyduğunuzda veya sunucuda uzak bir yordamı tetiklemek ve bu süreçte işlemi istemciden gizlemek istediğinizde kullanabilirsiniz.

RPC'nin iyi bir seçenek olduğu eylemler şunlardır:

  • Uzak bir cihazın kamerasıyla fotoğraf çekme
  • Dolandırıcılıkları tespit etmek için sunucuda bir makine öğrenimi algoritması kullanma
  • Bir uzak bankacılık sisteminde bir hesaptan diğerine para aktarma
  • Bir sunucuyu uzaktan yeniden başlatma

Bir REST API genellikle bir sunucudaki uzak veri nesnesinde oluşturma, okuma, güncelleme ve silme (CRUD) işlemlerini gerçekleştirmek için kullanılır. Bu nedenle REST API'ler, sunucu verilerinin ve veri yapılarının eşit şekilde açığa çıkması gereken durumlar için son derece uygundur.

Bir REST API'nin iyi bir seçenek olduğu eylemler şunlardır:

  • Veritabanına ürün ekleme
  • Bir müzik çalma listesinin içeriğini alma
  • Bir kişinin adresini güncelleme
  • Bir blog gönderisini silme

REST neden RPC'nin yerini aldı?

REST web API'ler günümüzün normu olsa da Uzaktan Yordam Çağrısı (RPC) henüz gözden kaybolmadı. Geliştiricilerin anlaması ve uygulaması daha kolay olduğundan, uygulamalarda genellikle bir REST API kullanılır. Bununla birlikte, RPC de var olmaya ve kullanım örneğine daha uygun olduğunda kullanılmaya devam ediyor.

RPC'nin gRPC gibi modern uygulamaları artık daha popüler. gRPC, bazı kullanım örneklerinde RPC ve REST'ten daha yüksek performans gösterir. İstek-yanıt veri alışverişi örüntüsü yerine istemci-sunucu iletişimlerinin akışına olanak tanır.

Farklılıkların özeti: RPC ve REST

 

RPC

REST

Bu nedir?

Bir sistem, uzak bir istemcinin sunucudaki bir yordamı yerelmiş gibi çağırmasına izin verir. 

İstemci ile sunucu arasında yapılandırılmış veri alışverişini tanımlayan bir dizi kuraldır.

Kullanım amaçları:

Uzak bir sunucuda eylemler gerçekleştirme.

Uzak nesneler üzerinde oluşturma, okuma, güncelleme ve silme (CRUD) işlemleri.

En uygun olduğu senaryo

Karmaşık hesaplamalar gerektiğinde veya sunucuda uzak bir işlemi tetiklerken.

Sunucu verilerinin ve veri yapılarının eşit şekilde açığa çıkması gerektiğinde.

Durum bilgisi

Durum bilgili veya durum bilgisiz.

Durum bilgisiz.

Veri iletme biçimi

Sunucu tarafından tanımlanan ve istemcinin uymak zorunda olduğu tutarlı bir yapıda.

Sunucu tarafından bağımsız olarak belirlenen bir yapıda. Aynı API içinde birden fazla farklı biçim iletilebilir.

AWS, API 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 karşılamanıza yardımcı olabilecek AWS hizmetlerine ö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ş REST 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 için hiçbir temel altyapı değişikliği yapmadan yazılım mimarilerinde sorunsuz şekilde gRPC trafik yönetimine 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 REST API'leri ve Uzaktan Yordam Çağrısı (RPC) API'leri kullanmaya başlayın.