Go 语言写一个 IAM 系统 (2) | 青训营

112 阅读2分钟

RESTful API

REST 代表的是表现层状态转移(REpresentational State Transfer),这本身并没有创造新的技术、组件或服务,它只是一种软件架构风格,是一组架构约束条件和原则,而不是技术框架。

REST 规范把所有内容都视为资源,对资源的操作有创建(create),获取(read),修改(update)和删除(delete),也就是已经被说烂了的 CRUD,这四个操作正好对应 HTTP 协议的 GET,POST,PUT 和 DELETE 方法,(实际开发可能全都对应到 POST 上去了),而且 HTTP 协议已经成了 RESTful API 事实上的标准。

RESTful API 设计原则

URI 设计

REST 资源操作映射为 HTTP 方法

统一返回格式

API 版本管理

API 命名

统一分页,过滤,排序,搜索功能

域名

RPC API

RPC 代表的是远程过程调用(Remote Procedure Call),是计算机通信协议。注意概念层面上的不同,REST 是一种规范,而 RPC 直接是通信协议。所以也能看到 HTTP 上面的 API 和 RPC 上面的 API 这种说法。

gRPC

gRPC 是由 Google 开发的高性能、开源、跨多种编程语言的通用 RPC 框架,基于 HTTP 2.0 协议开发,默认采用 Protocol Buffers 数据序列化协议。gRPC 具有如下特性:支持多种语言,例如 Go、Java、C、C++、C#、Node.js、PHP、Python、Ruby 等。基于 IDL(Interface Definition Language)文件定义服务,通过 proto3 工具生成指定语言的数据结构、服务端接口以及客户端 Stub。通过这种方式,也可以将服务端和客户端解耦,使客户端和服务端可以并行开发。通信协议基于标准的 HTTP/2 设计,支持双向流、消息头压缩、单 TCP 的多路复用、服务端推送等特性。支持 Protobuf 和 JSON 序列化数据格式。Protobuf 是一种语言无关的高性能序列化框架,可以减少网络传输流量,提高通信效率。这里要注意的是,gRPC 的全称不是 golang Remote Procedure Call,而是 google Remote Procedure Call。