工作原理
REST 把 API 视为由 URL 标识的资源集合,用 GET、POST、PUT、PATCH、DELETE 等统一方法操作,语义来自 HTTP:安全方法、幂等性、状态码、缓存和内容协商。RPC 把 API 视为一组过程(CreateOrder、CancelOrder、GetQuote),输入输出都有类型,传输方式基本是实现细节。
POST /orders/123/cancel HTTP/1.1
rpc CancelOrder(CancelOrderRequest) returns (Order);
两者都可能正确,区别在于契约以什么为中心:资源的状态迁移,还是具名操作。
何时使用与取舍
REST 适合公开 API、以增删改查为主的领域,以及受益于 HTTP 缓存、链接和通用工具的场景。RPC 适合具有丰富类型契约、需要流式传输和性能敏感的内部调用。许多系统二者并用:边缘用 REST 服务客户端和缓存,内部用 gRPC 承载服务间流量。
REST 的统一接口换来可缓存性和熟悉度,但在过程化流程上很别扭,团队最终仍会发明动作端点。RPC 换来精确性和代码生成,却削弱 HTTP 缓存,并让客户端更紧地绑定方法签名。公开的 RPC API 还需要谨慎的版本管理和错误映射;两种风格都不能弥补糟糕的资源设计或缺失的幂等性。
示例与误解
支付 API 能说明差异:GET /payments/123 和 POST /payments 是自然的 REST 资源,而 POST /payments/123/capture 是 REST 难以优雅表达的动作,CapturePayment RPC 则直接明了。把前者称为 REST、后者称为非 REST 忽略了重点:二者都是以不同重心组织的 HTTP API。相关概念:gRPC、API 版本管理、幂等性。