API实现之详细设计
在项目开始之前,首先把GOPATH的路径明确好,输入:
go env
可以得到:
···
GOPATH="/Users/ouchaochao/go"
···
在这个路径下,新建文件夹: /Users/ouchaochao/go/src/ouchaochao.cn/video/api
api项目结构如下
api
├── auth.go
├── dbops # 与数据库交互部分
│ ├── api.go
│ ├── api_test.go
│ ├── conn.go
│ └── internal.go
├── defs # 配置、定义等
│ ├── apidef.go
│ └── errs.go
├── handlers.go # 逻辑处理的放在这
├── main.go # 放一些简单的定义性的东西
├── response.go
├── session
│ └── ops.go
└── utils
└── uuid.go
在编辑.go文件之前,先把依赖装好,如:
go get github.com/julienschmidt/httprouter
编辑main.go
package main
import (
"github.com/julienschmidt/httprouter"
"net/http"
"ouchaochao.cn/video/api/handlers"
)
func RegisterHandlers() *httprouter.Router {
// 2.新建一个路由
router := httprouter.New()
// CreateUser在handlers.go文件
router.POST("/user", CreateUser)
// Login在handlers.go文件
router.POST("/user/:username", Login)
return router
}
func main() {
// 3.main是主入口,调用RegisterHandlers
r := RegisterHandlers()
// 1.监听8000端口
http.ListenAndServe(":8000", r)
}
编辑handlers.go
package main
import (
"github.com/julienschmidt/httprouter"
"io"
"net/http"
)
func CreateUser(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
io.WriteString(w, "Create User Handler")
}
func Login(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
uname := p.ByName("username")
io.WriteString(w, uname)
}
此时我们可以在api/目录下输入:
go install
运行上面代码后会在/Users/ouchaochao/go/bin/下会生成一个二进制文件:api,运行这个二进制文件:
./api
在chrome中打开:测试网页
如下图所示输入:
http://127.0.0.1:8000/user
METHOD选择post
总结:golang处理http请求的过程
main.go -> ListenAndServe -> RegisterHandlers -> routers -> handlers.go -> 找对应的函数
API设计:用户资源
List all videos:
URL: /user/:username/videos
Method: GET
SC: 200, 400, 500
Get one video:
URL: /user/:username/videos/:vid-id
Method: GET
SC: 200, 400, 500
Delete one video:
URL: /user/:username/videos/:vid-id
Method: DELETE
SC: 204: 400, 401, 403, 500
API设计:评论
Show comments:
URL: /videos/:vid-id/comments
Method: GET
SC: 200, 400, 500
Post a comment:
URL: /videos/:vid-id/comments
Method: POST
SC: 201, 400, 500
Delete a comment:
URL: /videos/:vid-id/comment-id
Method: DELETE
SC: 204, 400, 401, 403, 500
RESTful API设计
本节完