go语言下的RESTful简介
简介
REST(REpresentational State Transfer)指的是一组架构约束条件和原则。
Web
应用程序最重要的 REST
原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。客户端可以缓存数据以改进性能。
1.资源
就是我们平常上网访问的一张图片、一个文档、一个视频等。
2.表现层
就是资源的展现方式
例如一个txt文本信息,他可以输出成html、json、xml等格式,一个图片他可以jpg、png等方式展现。
3.状态转化
web
中,客户端能通知服务器端的手段,只能是HTTP
协议。HTTP
协议四个表示操作方式的动词get
,post
,put
,delete
综上:
(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"资源 表现层 状态转化"。
示例
下载第三方库
go get github.com/julienschmidt/httprouter
package main
import (
"fmt"
"github.com/julienschmidt/httprouter"
"net/http"
)
func getuser(w http.ResponseWriter, r *http.Request,ps httprouter.Params) {
//获取前端发来的数据
uid:=ps.ByName("uid")
fmt.Fprintf(w, "获取用户名 %s\n", uid)
mo:= r.Method
fmt.Fprintf(w, "获取请求方式 %s\n", mo)
//准备返回给前端的数据
data := map[string]interface{}{
"errno": 0,
"errmsg": "ok",
"data": "test",
}
//设置返回数据的格式(头部信息,json格式)
w.Header().Set("Content-Type", "application/json")
//将数据data转化为json格式, 并返回给前端
if err := json.NewEncoder(w).Encode(data); err != nil {
http.Error(w, err.Error(), 500)
return
}
}
func main() {
router := httprouter.New()
router.GET("/getuser/:uid", getuser)
http.Handle("/", router)
http.ListenAndServe(":8090", nil)
}
在浏览器访问http://127.0.0.1:8090/getuser/shuffle
会在页面显示
获取用户名 shuffle
获取请求方式 GET
{“data”:“test”,“errmsg”:“ok”,“errno”:0}