基于 RESTful API 的设计模式小实践
RESTful API
REST 是 REpresentational State Transfer 的缩写,表现层状态转移,这里的表现层指的是资源。
我们设计 API 的时候,每一个 URL 都要指向一个资源。
例如现在有一个订单(资源):
http://example.com/api/v1/orders
而我们的操作由 HTTP 的请求方法来决定。
v1 为 API 版本号。
- GET http://example.com/api/v1/orders
获取所有的订单 - GET http://example.com/api/v1/orders/123
获取 ID 为 123 的订单 - POST http://example.com/api/v1/orders
创建一个新的订单 - POST http://example.com/api/v1/orders/123
更新 ID 为 123 的订单 - PATCH http://example.com/api/v1/orders/123
修改 ID 为 123 的订单 - DELETE http://example.com/api/v1/orders/123
删除 ID 为 123 的订单
也可以在后面添加参数修改订单状态: - POST http://example.com/api/v1/orders/123/cancel
设置这个订单的状态为取消 - POST http://example.com/api/v1/orders/123/finish
设置这个订单的状态为完成
总之都是围绕 http://example.com/api/v1/orders 这个 URL 来设计。一句话总结就是:使用 URL 来定位资源,使用 HTTP 请求方法来操作。
小实践
接下来我用 Go 简单地写了个小服务器。
定义了一个 Orders 类型,有 Id、Name、Price 三个属性。
1 | type Orders struct { |
RESTful 相关处理 URL 使用的是 github.com/gorilla/mux 这个库,非常简便。
1 | r.HandleFunc("/api/v1/orders/{id}", getOrders).Methods("GET") |
数据库用的是 PostgreSQL,用了对象关系映射库 gorm。
然后简单地存了点模拟数据。

服务器监听的是 8080 端口。
然后我就不写前端了,直接使用 curl 命令在控制台操作。
使用 GET 操作获得所有订单:
1 | curl localhost:8080/api/v1/orders |

使用 GET 操作加上 ID 获取一个订单:
1 | //获取id为123的订单 |

使用 POST 创建订单:
1 | curl -X POST --data id=666 --data name="test123" --data price=998 localhost:8080/api/v1/orders |

这是服务器的输出

数据库可以看到

使用 DELETE 操作删除一个订单:
1 | curl -X DELETE localhost:8080/api/v1/orders/123 |
数据库更新

使用 PATCH 操作修改订单的数据:
1 | curl -X PATCH --data name=haobang localhost:8080/api/v1/orders/234 |
数据库
