Golang实现简单的Json RESTful_API - Go语言中文社区

Golang实现简单的Json RESTful_API


需要注意的是,REST是一种设计风格而不是标准,如果一个架构符合REST原则,我们就称它为RESTful架构。

gorilla/mux

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))
}

在浏览器中进行测试:

http://localhost:9899/people

http://localhost:9899/people/2

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42117918/article/details/87873148
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-06 10:43:59
  • 阅读 ( 682 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢