社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
需要注意的是,REST是一种设计风格而不是标准,如果一个架构符合REST原则,我们就称它为RESTful架构。
golang自带的http.SeverMux路由实现简单,本质是一个map[string]Handler,是请求路径与该路径对应的处理函数的映射关系。实现简单功能也比较单一:
不支持正则路由, 这个是比较致命的只支持路径匹配,不支持按照Method,header,host等信息匹配,所以也就没法实现RESTful架构,因此一般需要第三方工具包:gorilla/mux。
go get -u github.com/gorilla/mux
package main
import (
"encoding/json"
"github.com/gorilla/mux"
"log"
"net/http"
)
type Person struct {
//一句话总结:带有omitempty字段的成员,如果该字段为nil(字符串”“,空数组等),则打包的JSON结果不会有这个字段。
ID string `json:"id,omitemty"` //joson对应的名称为:id,omitemty:如果为空,则不输出
Name string `json:"name,omitempty"`
Age string `json:"age,omitempty"`
Address *Address `json:"address,omitempty"`
}
type Address struct {
City string `json:"city,omitempty"`
Province string `json:"province,omitempty"`
}
var people []Person
// *******************************************************************>>
// Get
// 获取所有person
func GetPeople(w http.ResponseWriter, req *http.Request) {
json.NewEncoder(w).Encode(people)
}
// 根据id获取person
func GetPerson(w http.ResponseWriter, req *http.Request) {
params := mux.Vars(req)
for _, item := range people {
if item.ID == params["id"] {
json.NewEncoder(w).Encode(item)
return
}
}
json.NewEncoder(w).Encode(people)
}
// <<*******************************************************************
// *******************************************************************>>
// Post
// 通过post操作向服务器添加数据
func PostPerson(w http.ResponseWriter, req *http.Request) {
params := mux.Vars(req)
var person Person
_ = json.NewDecoder(req.Body).Decode(&person)
person.ID = params["id"]
people = append(people, person)
json.NewEncoder(w).Encode(people)
}
// <<*******************************************************************
// *******************************************************************>>
// Delete
// 根据id进行删除操作
func DeletePerson(w http.ResponseWriter, req *http.Request) {
params := mux.Vars(req)
for index, item := range people {
if item.ID == params["id"] {
people = append(people[:index], people[index+1:]...)
break
}
}
json.NewEncoder(w).Encode(people)
}
// <<*******************************************************************
func main() {
people = append(people, Person{ID: "1", Name: "jiangzhou", Age: "25", Address: &Address{City: "重庆", Province: "重庆"}})
people = append(people, Person{ID: "2", Name: "xiangjing", Age: "23", Address: &Address{City: "四川", Province: "成都"}})
// Get handle function:
router := mux.NewRouter()
router.HandleFunc("/people", GetPeople).Methods("GET")
router.HandleFunc("/people/{id}", GetPerson).Methods("GET")
// Post handle function
router.HandleFunc("/people/{id}", PostPerson).Methods("POST")
// Delete handle function:
router.HandleFunc("/people/{id}", DeletePerson).Methods("DELETE")
// 启动 API端口9899
log.Fatal(http.ListenAndServe(":9899", router))
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!