Golang实战流媒体视频网站笔记6:API之http handler层
API设计之http handler层
handler -> validation{1.request,2.user} -> business logic -> reponse .
四个步骤:
- handler 是request进来的第一个处理的模块
- 之后会做validation 校验,第一个校验request是否合法,第二个是校验用户是不是已经注册过的合法用户
- 做逻辑处理
- 得出最后的结果 reponse
validation(检验)
1.数据结构data model.
2.一旦出现问题返回的错误error handling.
在文件夹defs里面加入apidef.go 和errs.go
//apidef.go
package defs
//requsets
type UserCreadential struct{
Username string `json:"user_name"`
Pwd string `json:"pwd"`
}
//Go里面的原生方法处理json的一种方式
//是在struct打Tag的方式,Tag的名称是user_name ,Tag的属性是json
//在序列化和反序列化json的时候会自动转换成我们想要的东西
//{
// user_name: xxx,
// pwd: xxx
//}
Go里面的原生方法处理json的一种方式
是在struct打Tag的方式,Tag的名称是user_name ,Tag的属性是json
在序列化和反序列化json的时候会自动转换成我们想要的东西
{
user_name: xxx,
pwd: xxx
}
在errs.go里面
package defs
type Err struct{
Error string `json:"error"`
ErrorCode string `json:"error_code"`
}
type ErrorResponse struct{
HttpSC int
Error Err
}
var (
ErrorRequestBodyParseFailed = ErrorResponse{HttpSC: 400,Error:Err{Error:"Request body is not correct",ErrorCode: "001"}}
//request传进来的数据是没办法解析的
//嵌套的对象
ErrorNotAuthUser = ErrorResponse{HttpSC: 401,Error:Err{Error: "User authentication failed",ErrorCode: "002"}}
//验证不通过,用户是不存在的
)
然后把第三步的business logic放在handler里面,然后通过handler去调用dbops
在dbops文件夹里面创建api.go
//api.go
package dbops
import (
"database/sql"
)
//内部方法
func openConn() *sql.DB {
}
//Web方法 创建用户
func AddUserCrential(loginName string,pwd string) error {
}
func GetUserCredential(loginName string)(string,error) {
}
然后在大的API文件夹里面创建response.go
//response.go
package main
import (
"io"
"net/http"
)
func sendErrorResponse(w http.ResponseWriter) {
}
func sendNormalResponse(w http.ResponseWriter) {
}
整个分层结构
从main函数开始,然后进到handler,然后handler调用dbops,从dbops拿到信息,然后做进一步处理,在做进一步处理的过程中用到defs里面的比如消息的定义,一起组成response,最后调取response,将response发出来。
符合ERSTful API在架构上的建议。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 赛 の 任意门!
评论
ValineGitalk