在本章中,我们将介绍 go 和 Json Web 编程,以 API 形式创建具有响应数据类型的 API Web 服务。
package main import "encoding/json" import "net/http" import "fmt" type student struct { ID string Name string Grade int } var data = []student{ student{"E001", "ethan", 21}, student{"W001", "wick", 22}, student{"B001", "bourne", 23}, student{"B002", "bond", 23}, }
上面的student结构体作为样本数据切片元素类型,存储在data变量中。
接下来,创建一个 user() 函数来处理 /users 端点。在此函数中,通过 r.Method() 属性进行请求类型检测过程,以查明请求类型是 Post 还是 Get 还是其他类型。
func users(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { var result, err = json.Marshal(data) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Write(result) return } http.Error(w, "", http.StatusBadRequest) }
如果请求是GET(检索数据),则数据以JSON编码
用作响应。
w.Header().Set("Content-Type", "application/json") 语句用于
确定响应类型,即 JSON。而 r.Write()
用于注册数据作为响应。
否则,如果请求无效,则使用
将响应设置为错误
http.Error() 函数。
还为 /user 端点设置一个处理程序。该端点与
的区别
上面的 /user 是:
/users 端点返回所有现有示例数据(数组)。
/user 端点仅返回一条数据,取自 data
基于其 ID 的样本。在此端点,客户端必须发送
还有正在查找的数据的ID信息
func user(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { var id = r.FormValue("id") var result []byte var err error for _, each := range data { if each.ID == id { result, err = json.Marshal(each) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Write(result) return } } http.Error(w, "User not found", http.StatusNotFound) return } http.Error(w, "", http.StatusBadRequest) }
r.FormValue()方法用于检索从
发送的表单数据
客户端,在此上下文中引用的数据是 ID。
通过使用该ID,可以搜索相关数据。如果有的话
作为响应返回。如果不存在,则错误 400,错误请求
返回消息“未找到用户”。
最后,实现上面的两个处理程序。
func main() { http.HandleFunc("/users", users) http.HandleFunc("/user", user) fmt.Println("starting web server at http://localhost:8080/") http.ListenAndServe(":8080", nil) }
运行程序,现在Web服务器已上线并且可以使用数据。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3