基于 RESTful API 的设计模式小实践

RESTful API

REST 是 REpresentational State Transfer 的缩写,表现层状态转移,这里的表现层指的是资源。
我们设计 API 的时候,每一个 URL 都要指向一个资源。

例如现在有一个订单(资源):
http://example.com/api/v1/orders
而我们的操作由 HTTP 的请求方法来决定。
v1 为 API 版本号。

小实践

接下来我用 Go 简单地写了个小服务器。
定义了一个 Orders 类型,有 Id、Name、Price 三个属性。

1
2
3
4
5
type Orders struct {
Id int
Name string
Price int
}

RESTful 相关处理 URL 使用的是 github.com/gorilla/mux 这个库,非常简便。

1
2
3
4
5
r.HandleFunc("/api/v1/orders/{id}", getOrders).Methods("GET")
r.HandleFunc("/api/v1/orders", getOrders).Methods("GET")
r.HandleFunc("/api/v1/orders", createAnOrders).Methods("POST")
r.HandleFunc("/api/v1/orders/{id}", updateOrders).Methods("PATCH")
r.HandleFunc("/api/v1/orders/{id}", delteOrders).Methods("DELETE")

数据库用的是 PostgreSQL,用了对象关系映射库 gorm。
然后简单地存了点模拟数据。

ascen.me_restful

服务器监听的是 8080 端口。
然后我就不写前端了,直接使用 curl 命令在控制台操作。

使用 GET 操作获得所有订单:

1
curl localhost:8080/api/v1/orders

ascen.me_restful

使用 GET 操作加上 ID 获取一个订单:

1
2
//获取id为123的订单
curl localhost:8080/api/v1/orders/123

ascen.me_restfule

使用 POST 创建订单:

1
curl -X POST --data id=666 --data name="test123" --data price=998 localhost:8080/api/v1/orders

ascen.me_restfule

这是服务器的输出

ascen.me_restfule

数据库可以看到

ascen.me_restfule

使用 DELETE 操作删除一个订单:

1
curl -X DELETE localhost:8080/api/v1/orders/123

数据库更新

ascen.me_restfule

使用 PATCH 操作修改订单的数据:

1
curl -X PATCH --data name=haobang localhost:8080/api/v1/orders/234

数据库

ascen.me_restfule