基于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 |
数据库