[Javascript] RPC: gRPC與protobuf

gRPC
https://grpc.io/

從實踐到原理,帶你參透 gRPC
https://segmentfault.com/a/1190000019608421

API 檔就是你的伺服器,REST 的另一個選擇:gRPC
https://yami.io/grpc/

Comparing gRPC services with HTTP APIs
https://docs.microsoft.com/zh-tw/aspnet/core/grpc/comparison?view=aspnetcore-3.0

思考gRPC :為什麼是protobuf
http://hengyunabc.github.io/thinking-about-grpc-protobuf/

gRPC on Node.js
https://github.com/grpc/grpc-node

在 Node.js 中提供 gRPC 服務
http://www.moye.me/2017/02/24/using-grpc-in-nodejs/

grpc-web
https://github.com/grpc/grpc-web

REST範式替代品gRPC-Web釋出正式版
https://www.ithome.com.tw/news/126704

比較 gRPC 服務與 HTTP API
https://docs.microsoft.com/zh-tw/aspnet/core/grpc/comparison?view=aspnetcore-3.1

使用 grpc-web, vue 和 Nginx 搭建一个简单 todo 示例

gRPC 是一個高性能、開源和通用的 RPC 框架,面向移動和 HTTP/2 設計。目前提供 C、Java 和 Go 語言版本,分別是:grpc, grpc-java, grpc-go. 其中 C 版本支援 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持。

gRPC 基於 HTTP/2 標準設計,帶來諸如雙向流、流控、頭部壓縮、單 TCP 連接上的多複用請求等特性。這些特性使得其在移動設備上表現更好,更省電和節省空間佔用。

gRPC-Web 讓你能夠使用.proto 來定義用戶端 Web 應用程式和後端 gRPC 伺服器之間的服務“契約”,並自動生成用戶端 JavaScript(你可以選擇 Closure 編譯器或使用更為廣泛的 CommonJS)。

你可以不用再為這些事情操心:創建自訂 JSON 序列化和反序列化邏輯、處理 HTTP 狀態碼(可能因REST API 而異)、Content-Type 協商等。從更廣泛的架構角度來看,gRPC-Web 讓端到端的 gRPC 成為可能。

這意味著你現在可以通過.proto 檔來定義用戶端和伺服器端資料類型和服務介面,輕鬆構建真正的端到端 gRPC 應用程式架構。gRPC-Web 為 Web 開發提供了 REST 之外的另一個選擇。

跨語言的序列化方案。事實上的跨語言序列化方案只有三個: protobuf, thrift, json。json體積太大,並且缺少類型資訊,實際上只用在RESTful介面上,並沒有看到RPC框架會默認選json做序列化的。

為什麼protobuf沒有序列化漏洞。序列化漏洞的根本原因是:沒有控制序列化的類型範圍。而為什麼在protobuf裡並沒有這些反序列化問題?因為protobuf在IDL裡定義好了package範圍,且protobuf的代碼都是自動生成的,怎麼處理二進位資料都是固定的,protobuf把一切都框住了,少了靈活性,自然就少漏洞。


#gRPC, protobuf, 跨語言, 序列化

留言