Pasukan kejuruteraan masih menghabiskan seluruh petang berdebat sama ada REST sudah mati atau jika gRPC telah menjadikan segala-galanya usang. Perdebatan itu terlepas daripada intipati sebenar. Anda bukan sedang memilih protokol yang terbaik. Anda sedang memilih sempadan yang betul. Protokol yang berfungsi dengan cemerlang di dalam kluster Kubernetes anda akan tersekat apabila anda menyerahkannya kepada seribu pembangun luaran. Protokol yang menjimatkan jalur lebar berharga aplikasi mudah alih anda akan membankrapkan infrastruktur anda jika anda membukanya kepada pertanyaan awam yang rawak. Anggap keputusan ini seperti pertandingan populariti teknologi, dan anda akan mengukuhkan hutang seni bina yang akan bertahan lebih lama daripada setiap ahli pasukan anda sekarang.
Prinsip Sempadan
Seni bina adalah tentang pertukaran, bukan tentang siapa juara. Soalan yang betul bukanlah "Mana yang paling pantas?" atau "Mana yang paling baharu?". Soalannya ialah "Siapa yang berada di sebelah sana, dan apa yang mereka kawal?". Protokol adalah objek sempadan. Memilih protokol yang salah bukan sahaja melambatkan anda. Ia menanamkan kesilapan ke dalam sistem anda selama bertahun-tahun.
API Awam: REST Tidak Membosankan, Ia Bertanggungjawab
Apabila pengguna anda ialah pembangun luaran yang tidak pernah anda temui, API anda adalah sebuah produk, bukan sekadar antara muka. Pembangun tersebut sedang melakukan penyahpepijatan pada pukul dua pagi dengan hanya menggunakan curl dan koleksi Postman. Jika mereka perlu memasang perpustakaan klien tersuai atau mempelajari bahasa skema sebelum panggilan pertama mereka berjaya, anda telah pun kehilangan mereka.
REST bertahan di sini kerana ia adalah web itu sendiri. Kaedah HTTP, kod status, dan JSON adalah bahasa umum. Penyimpanan cache bukan sekadar pemikiran sampingan; ia adalah infrastruktur yang sedia ada. Pelayar, CDN, dan cache pinggir memahami pengepala Cache-Control dan pengesahan ETag secara asli. Anda boleh meletakkan API REST di belakang CDN standard dan mendapat penjimatan jalur lebar serta-merta tanpa menulis satu baris pun logik penyimpanan cache. Perkara ini penting apabila trafik awam tidak dapat diramalkan dan anda membayar untuk setiap gigabait yang keluar dari awan anda.
Sebaliknya, GraphQL membawa beban yang berat kepada sempadan awam. Titik akhir GraphQL awam memerlukan analisis kos pertanyaan, had kedalaman, dan skor kerumitan untuk menghalang satu pertanyaan yang cuai atau berniat jahat daripada melumpuhkan pangkalan data anda. Anda bukan sekadar menghantar API; anda sedang membina enjin pelaksanaan pertanyaan, strategi pengehadan kadar, dan model pengebilan pengkomputeran. Melainkan anda mempunyai kekuatan operasi seperti platform terbesar, beban kerja tersebut adalah melulu untuk permukaan awam. REST menetapkan pagar penghadang secara lalai. Setiap titik akhir melakukan satu perkara. Pengguna mengambil tepat apa yang anda tawarkan, bukan apa sahaja yang mereka bayangkan.
Perkhidmatan Dalaman: Kuasai Seluruh Saluran
Di dalam organisasi anda, perbualan berubah. Anda mengawal kedua-dua klien dan pelayan. Anda boleh menentukan timbunan teknologi untuk setiap perkhidmatan dalam rantaian panggilan. Di sinilah gRPC membuktikan nilainya.
Pertama, berhenti menganggap JSON sebagai sesuatu yang suci. Protocol Buffers menyahserial kira-kira tiga kali lebih pantas daripada JSON. Muatan adalah lebih kecil kerana formatnya adalah binari. Pada rangkaian dalaman yang sibuk, milisaat dan megabait tersebut akan terkumpul menjadi wang sebenar dan merendahkan latensi ekor. Lebih penting lagi, Protobuf memberi anda kontrak yang ketat. Apabila anda menukar jenis medan atau menamakan semula mesej, ralat berlaku pada masa kompilasi, bukan pada pukul tiga pagi di produksi apabila perkhidmatan hiliran mula mencetuskan pengecualian parsing.
gRPC berjalan di atas HTTP/2, jadi anda mendapat pemampatan pengepala, aliran berbilang (multiplexed streams), dan semantik penstriman sebenar. Jika anda menyalurkan acara berlepas tinggi antara perkhidmatan atau menolak kemas kini masa nyata, penstriman sebelah pelayan dan dua hala adalah ciri asli, bukannya penyelesaian sementara "long-polling" yang ditampal pada rangka kerja permintaan-respons.
Terdapat satu kekangan besar: jangan halakan gRPC terus ke pelayar. Model rangkaian pelayar tidak bercakap HTTP/2 seperti yang diharapkan oleh gRPC. Anda akhirnya akan terpaksa memasang grpc-web dan proksi seperti Envoy pada timbunan anda hanya untuk membolehkan pelayar berkomunikasi dengan bahagian belakang. Itu bukan pepijat; itu adalah isyarat sempadan. Simpan gRPC di belakang tembok api anda, di antara perkhidmatan yang mempercayai satu sama lain, dan anggap kerumitan penyahpepijatannya sebagai harga untuk kelajuan. Muatan binari tidak mudah dibaca dalam fail log seperti mana JSON.
UI Kompleks dan Mudah Alih: Niche GraphQL
Skrin mudah alih moden adalah gabungan pelbagai komponen. Satu paparan mungkin memerlukan profil pengguna,
