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