Saya membaca penjelasan GRPC ini dan diagram ini menarik:
Bagaimana cara kerja lapisan transport? Jika melalui jaringan ... mengapa disebut RPC? Lebih penting lagi, bagaimana ini berbeda dari REST yang mengimplementasikan API untuk lapisan layanan (kelas di klien yang memiliki metode yang membuat permintaan http)?
Jawaban:
Lapisan transport bekerja menggunakan HTTP / 2 di atas TCP / IP. Ini memungkinkan koneksi latensi yang lebih rendah (lebih cepat) yang dapat memanfaatkan satu koneksi dari klien ke server (yang membuat penggunaan koneksi lebih efisien dan dapat menghasilkan penggunaan sumber daya server yang lebih efisien.
HTTP / 2 juga mendukung konektivitas dua arah dan konektivitas asynchronous. Jadi dimungkinkan bagi server untuk secara efisien melakukan kontak dengan klien untuk mengirim pesan (respons / pemberitahuan asinkron, dll ..)
Meskipun, REST dan gRPC dapat menghasilkan stub klien / server (menggunakan sesuatu seperti swagger untuk REST), REST memiliki serangkaian panggilan 'fungsi' utama (atau kata kerja):
sedangkan gRPC Anda dapat menentukan semua jenis panggilan fungsi termasuk sinkron / asinkron, searah / dua arah (aliran), dll ..
Dengan menggunakan gRPC, klien melakukan panggilan ke metode lokal. Bagi pemrogram, sepertinya Anda melakukan panggilan lokal, tetapi lapisan yang mendasarinya (rintisan klien yang dibuat secara otomatis) mengirimkan panggilan tersebut ke server. Untuk server sepertinya metodenya dipanggil secara lokal.
gRPC menangani semua saluran air yang mendasarinya dan menyederhanakan paradigma pemrograman. Namun, bagi beberapa puritan REST yang berdedikasi, ini mungkin tampak seperti komplikasi yang berlebihan. YMMV
sumber
REST tidak membutuhkan JSON atau HTTP / 1.1
Anda bisa dengan mudah membangun layanan RESTful yang mengirim pesan protobuf (atau apa pun) melalui HTTP / 2
Anda dapat membangun layanan RESTful yang mengirim JSON melalui HTTP / 2
Anda dapat membangun layanan RESTful yang mengirim pesan protobuf melalui HTTP / 1.1
Layanan RESTful bukanlah "hack" di atas HTTP / xx, mereka adalah layanan yang mengikuti prinsip-prinsip arsitektur dasar yang telah membuat versi HTTP berhasil (seperti cache permintaan GET & replayability permintaan PUT).
gRPC, SOAP, et. al lebih seperti peretasan - peretasan di atas HTTP ke terowongan layanan gaya RPC melalui HTTP, untuk merutekan batasan firewall & middlebox. Itu tidak selalu berarti buruk. Terkadang Anda mungkin menginginkan layanan gaya RPC daripada layanan REST, dan kita harus hidup di dunia di mana middlebox sulit untuk diganti.
Jika Anda tidak punya waktu untuk membaca tentang definisi sebenarnya dari REST: https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Selalu ada TLDR; versi di wikipedia:
https://en.wikipedia.org/wiki/Representational_state_transfer
Jika Anda membutuhkan layanan bergaya RPC, tentu saja, gRPC sangat bagus. Jika Anda ingin hidup di web, atau Anda ingin semua manfaat yang datang dengan layanan gaya RESTful, maka buat layanan gaya RESTful. Dan jika terlalu lambat untuk membuat serial / deserialisasi data dalam format JSON di layanan tenang Anda, tidak masalah untuk menggunakan protobuf atau apa pun.
Jika gRPC adalah versi 2 dari apa pun, itu adalah SOAP versi 2. Yang tidak buruk, seperti SOAP.
Dan, tidak, Anda tidak bisa begitu saja "memanggil fungsi apa pun" dalam permintaan GET Anda, dan memiliki layanan RESTful.
Satu hal lagi: jika Anda akan menggunakan protobuf melalui layanan RESTful, lakukan dengan benar, gunakan header tipe konten, dll. Dengan itu, Anda dapat dengan mudah mendukung JSON DAN protobuf.
Mundur dari kotak SOAP saya sekarang ..;)
sumber
Keuntungan terbesar gRPC dibandingkan REST adalah dukungannya terhadap HTTP / 2 dibandingkan dengan kakek HTTP 1.1. Kemudian keuntungan terbesar dari HTTP / 2 dibandingkan HTTP 1.1 adalah, 'HTTP / 2 memungkinkan server untuk "mendorong" konten' ...
sumber