Загрузка…
Загрузка…
HTTP / REST · middle · сложность 6
gRPC — contract-first: protoc из .proto генерирует typed client/server; Protobuf over HTTP/2 с native streaming. Браузер — gRPC-Web через proxy, без full bidirectional streaming.
Contract-first codegen. protoc компилирует .proto в stub и server interface. Смена контракта → regenerate → compiler ловит mismatch — headline advantage над hand-written REST.
Protobuf wire format. Поля по number, не name (name = 2 = field 2). Numbers — реальный контракт, never reuse. Backward compatibility: старый код игнорирует unknown fields. Binary без имён ≈ 30–60% меньше JSON, дешевле parse.
Четыре call types на HTTP/2 streams: unary (1→1), server streaming (1→many), client streaming (many→1), bidirectional (many↔many). Streaming native — HTTP/2 streams, без WebSocket bolt-on.
Почему browser не raw gRPC. Нужен контроль HTTP/2 frames и trailers. fetch/XHR не expose trailers/frames из JS. gRPC-Web — browser framing через fetch, proxy (Envoy) переводит gRPC-Web ↔ gRPC.
gRPC-Web limit: unary и server streaming only — не client streaming и не full bidi. Browser stream up continuously — WebSocket, не gRPC-Web.
gRPC — typed microservice RPC с Protobuf и HTTP/2 streaming; в браузере — gRPC-Web через proxy с урезанными streaming modes.