Go语言实战流媒体视频网站(3.3-3.5)

328 阅读2分钟

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

测试
成功后返回:200 OK字样。

总结: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设计

API设计

本节完