Загрузка…
Загрузка…
gRPC — Protobuf contract, binary over HTTP/2; gRPC-Web в browser через proxy, unary и server streaming only.
// Reserve retired field numbers so they can never be reused — a real backward-compat trap
message User {
int32 id = 1;
string name = 2;
reserved 3; // field 3 was 'ssn' — removed; never reuse the NUMBER
string email = 4; // new fields are additive & optional
}// Browser side (gRPC-Web) — generated, typed client. No hand-written fetch/JSON.
import { UserServiceClient } from './gen/user_grpc_web_pb';
const client = new UserServiceClient('https://api.example.com'); // points at the proxy
// unary — works in the browser
const user = await client.getUser({ id: 7 });
// server streaming — works: server pushes many, browser reads
const stream = client.listUsers({ team: 'core' });
stream.on('data', (u) => render(u));
stream.on('end', () => done());
// ❌ client streaming / bidirectional — NOT supported in gRPC-Web.
// For continuous client→server push from the browser, use a WebSocket.reserved prevents field number reuse — backward compat trap. gRPC-Web limited vs native gRPC; bidirectional from browser → WebSocket.
gRPC internal microservices; gRPC-Web browser unary/server-stream via proxy; contract discipline with reserved fields.
