Ana içeriğe geç

Yan yana

REST APIvsgRPC

REST ile gRPC arasındaki fark nedir?

Güncellendi 2 dk okuma7 fark

Kısaca

REST kaynakları HTTP üzerinden, genelde JSON ile sunar; gRPC ise tipli uzak fonksiyonları HTTP/2 ile ikili mesajlarla çağırır: daha hızlı ama tarayıcıda zor.

REST API

Representational State Transfer API

REST API, verileri URL'lerle tanımlanan kaynaklar olarak sunan ve istemcilerin onları standart HTTP metotlarıyla okuyup değiştirmesini sağlayan web API'sidir.

REST API sayfasını oku

gRPC

gRPC, uzak sunucudaki fonksiyonları yerelmiş gibi çağırmaya yarayan açık kaynaklı framework'tür; Protocol Buffers ve HTTP/2 ile hızlı, tipli mesajlar taşır.

gRPC sayfasını oku

REST API ve gRPC karşılaştırması

ÖzellikREST APIgRPC
TarzURL'lerdeki kaynaklar, HTTP metotlarıyla işlem görürTipli bir servis üzerinde çağrılan uzak fonksiyonlar
Sözleşmeİsteğe bağlı; çoğunlukla OpenAPI ile belgelenirİstemci ve sunucu kodunu üreten zorunlu .proto dosyası
Yük biçimiGenellikle JSON metni, insanlar için okunması kolayProtocol Buffers ikili biçimi, daha küçük ve ayrıştırması daha hızlı
TaşımaHerhangi bir HTTP sürümü: HTTP/1.1, HTTP/2 ya da HTTP/3HTTP/2; birçok çağrı tek bağlantıyı paylaşır
Akış (streaming)İstek-yanıt; akış ek teknikler gerektirirYerleşik istemci, sunucu ve iki yönlü akış
Tarayıcı desteğiHer tarayıcıda yerel olarak çalışırArada gRPC-Web ya da bir ağ geçidi gerekir
En uygun olduğu yerGenel API'ler, web ön yüzleri ve basit entegrasyonlarHızlı, yüksek hacimli dahili servisler arası çağrılar

Fark, açıklamalı

REST, istemcilerin URL'lerdeki kaynakları HTTP metotlarıyla okuyup değiştirdiği, genellikle JSON alışverişi yaptığı bir mimari tarzdır. gRPC ise aslen Google'da geliştirilmiş bir uzak yordam çağrısı (RPC) framework'üdür; servisleri ve mesajları bir .proto dosyasında tanımlarsınız, istemci ve sunucu kodu bundan üretilir, böylece uzak bir servisi çağırmak yerel bir fonksiyonu çağırmak gibi görünür.

Fark, hedeflerinden gelir. REST sadeliği ve erişilebilirliği öne çıkarır: herhangi bir HTTP istemcisi, tarayıcı ya da komut satırı aracı onu çağırabilir ve yanıtlar insan tarafından okunabilir. gRPC verimliliği ve katı sözleşmeleri öne çıkarır: Protocol Buffers kompakt bir ikili biçimdir, HTTP/2 birçok çağrının tek bağlantıyı paylaşmasını sağlar ve iki yönlü akış (streaming) yerleşiktir.

Birçok sistem ikisini de kullanır. Yaygın bir kalıp, tarayıcılar ve üçüncü taraflar için uçta REST ya da GraphQL, hız ve tipli sözleşmelerin en çok önem taşıdığı dahili mikroservisler arasında ise gRPC kullanmaktır. Ağ geçitleri REST çağrılarını gRPC'ye de çevirebilir; böylece tek bir servis her iki tür istemciye hizmet verebilir.

Sık yapılan bir yanlış, gRPC'nin sadece daha iyi bir REST olduğu düşüncesidir. Tarayıcılar yerel gRPC'yi doğrudan çağıramaz ve gRPC-Web gibi bir çeviri katmanına ihtiyaç duyar, ikili mesajları hata ayıklarken incelemek daha zordur ve birçok genel API için REST'in erişilebilirliği ve sadeliği ham hızdan daha önemlidir.

Hangisini kullanmalısınız?

REST API şu durumlarda doğru seçim:

  • API'niz herkese açık ya da doğrudan tarayıcılardan çağrılıyor.
  • İnsanların standart araçlarla okuyup hatalarını ayıklayabileceği yanıtlar istiyorsunuz.
  • HTTP önbellekleme, CDN'ler ya da kolay üçüncü taraf entegrasyonlarına güveniyorsunuz.

gRPC şu durumlarda doğru seçim:

  • Dahili servisler birbirini çok sık çağırıyor ve gecikme önemli.
  • Birkaç dil arasında paylaşılan, katı ve üretilmiş sözleşmeler istiyorsunuz.
  • Bir ya da iki yönde akışa ihtiyacınız var.
  • Mobil ya da IoT bağlantılarında olduğu gibi bant genişliği sınırlı.

Sık sorulan sorular

gRPC, REST'ten daha mı hızlı?

Servisler arası çağrılarda genellikle evet; çünkü ikili Protocol Buffers JSON'dan küçüktür ve HTTP/2 bağlantıları yeniden kullanır. Fark en çok yüksek çağrı hacimlerinde önemlidir; tipik bir web isteğinde ağ gecikmesi baskındır.

Tarayıcılar gRPC kullanabilir mi?

Doğrudan kullanamaz. Tarayıcılar gRPC'nin ihtiyaç duyduğu alt düzey HTTP/2 denetimini sunmaz; bu yüzden web uygulamaları gRPC-Web ya da JSON'lu HTTP ile gRPC arasında çeviri yapan bir ağ geçidi kullanır.

gRPC HTTP kullanır mı?

Evet. gRPC, HTTP/2 üzerinde çalışır; ama HTTP'yi kaynak URL'leri gibi REST kurallarını izlemek yerine ikili mesajlar için bir taşıma katmanı olarak kullanır.

Daha fazla

Ayarlar