本片文章记录我在做大项目每天遇到的问题以及心得体会,如有不对,欢迎各位同学评论指正呀!!!
视频流接口
开发需求
不限制登录状态,返回按投稿时间倒序的视频列表,视频数由服务端控制,单次最多30个。
返回响应
成功 (200)
HTTP 状态码: 200
内容格式: JSON
数据结构:
type ApifoxModel struct {
NextTime *int64 `json:"next_time"` // 本次返回的视频中,发布最早的时间,作为下次请求时的latest_time
StatusCode int64 `json:"status_code"`// 状态码,0-成功,其他值-失败
StatusMsg *string `json:"status_msg"` // 返回状态描述
VideoList []Video `json:"video_list"` // 视频列表 }
// Video
type Video struct {
Author User `json:"author"` // 视频作者信息
CommentCount int64 `json:"comment_count"` // 视频的评论总数
CoverURL string `json:"cover_url"` // 视频封面地址
FavoriteCount int64 `json:"favorite_count"`// 视频的点赞总数
ID int64 `json:"id"` // 视频唯一标识
IsFavorite bool `json:"is_favorite"` // true-已点赞,false-未点赞
PlayURL string `json:"play_url"` // 视频播放地址
Title string `json:"title"` // 视频标题 }
// 视频作者信息 //
// User
type User struct {
FollowCount int64 `json:"follow_count"` // 关注总数
FollowerCount int64 `json:"follower_count"`// 粉丝总数
ID int64 `json:"id"` // 用户id
IsFollow bool `json:"is_follow"` // true-已关注,false-未关注
Name string `json:"name"` // 用户名称 }
聊聊Gin中的上下文context
gin.Context主要由下面几部分组成
1.Metadata Management (我自己叫法:Key-Value)
这个模块比较简单, 就是从gin.Context中Set Key-Value, 以及各种个样的Get方法, 如GetBool, GetString等
实现这些功能也很简单, 其实就是一个map
// Keys is a key/value pair exclusively for the context of each request.
Keys map[string]interface{}
2.Input Data
这个模块相当重要了, gin的README基本上都在介绍这个模块的用法.
3. Param (我自己的叫法: 路由变量)
gin的标准叫法是Parameters in path. restful风格api如/user/john, 这个路由在gin里面是/user/:name, 要获取john就需要使用Param函数
name := c.Param("name")
这个方法实现也很简单, 就是在tree.go里面根据路由相关规则解析出来然后赋值给gin.Context的Params.
handlers, params, tsr := root.getValue(path, c.Params, unescape)
4. Query
/welcome?firstname=Jane&lastname=Doe这样一个路由, first, last即是Querystring parameters, 要获取他们就需要使用Query相关函数.
c.Query("first") // Jane
c.Query("last") // Doe
当然还有其他相关函数:
- QueryMap
- DefaultQuery 这个默认值的实现更加简单, 当QueryString中不包含这个值, 直接返回填入的值
这些方法是的实现是利用net/http的Request的方法实现的
5. PostForm
对于POST, PUT等这些能够传递参数Body的请求, 要获取其参数, 需要使用PostForm
POST /user/1
{
"name":manu,
"message":this_is_great
}
name := c.PostForm("name")
message := c.PostForm("message")
其他相关函数
- DefaultPostForm
这些相关的方法是实现还是利用net/http的Request的方法实现的