blog
blog copied to clipboard
posts/go/gin/2018-02-13-api-03/
很好的系列教程。
@stevefoxuser 有问题欢迎随时沟通。
@eddycjy 大标题【定义接口】这里,获取指定文章:POST("/articles/:id”),获取制定文章应该是GET吧?
已经连续看了好几篇了,作者真的挺用心的! 赞~ 👍👍👍
DeleteArticle 方法里面的 .Delete(Article{})
改为传引用 .Delete(&Article{})
会不会好一些?
为了方便展示我选用了 GET/Param 传参的方式,而后期会改为 POST。
作者这个 idea 超棒,测试调用比较很方便!如果是用 body 传参,就没那么轻松了。
奉上 curl 版本的请求,方便大家测试接口调用:
获取文章列表
curl http://127.0.0.1:8000/api/v1/articles
获取指定文章
curl http://127.0.0.1:8000/api/v1/articles/1
新建文章
curl -X POST http://127.0.0.1:8000/api/v1/articles?tag_id=1&title=test1&desc=test-desc&content=test-content&created_by=test-created&state=1
更新指定文章
curl -X PUT http://127.0.0.1:8000/api/v1/articles/1?tag_id=1&title=test-edit1&desc=test-desc-edit&content=test-content-edit&modified_by=test-created-edit&state=0
删除指定文章
curl -X DELETE http://127.0.0.1:8000/api/v1/articles/1
//获取单个文章 func GetArticle(c *gin.Context) { id := com.StrTo(c.Param("id")).MustInt()
valid := validation.Validation{}
valid.Min(id, 1, "id").Message("ID必须大于0")
code := e.INVALID_PARAMS
var data interface {}
if ! valid.HasErrors() {
if models.ExistArticleByID(id) {
data = models.GetArticle(id)
code = e.SUCCESS
@eddycjy 这种不需要两次查询了吧,可以通过GetArticle多返回个error来判断是否存在文章记录来减少查询次数
"data" : make(map[string]string), 为什么要这样写??
通俗易懂,给作者点赞👍
通俗易懂,给作者点赞👍
@lyne007 感谢支持 😄
"data" : make(map[string]string), 为什么要这样写??
@yeyang666 具体指的哪一块代码?如果单指这一句代码的话,主要是为了初始化 map。
//获取单个文章 func GetArticle(c *gin.Context) { id := com.StrTo(c.Param("id")).MustInt()
valid := validation.Validation{} valid.Min(id, 1, "id").Message("ID必须大于0") code := e.INVALID_PARAMS var data interface {} if ! valid.HasErrors() { if models.ExistArticleByID(id) { data = models.GetArticle(id) code = e.SUCCESS
@eddycjy 这种不需要两次查询了吧,可以通过GetArticle多返回个error来判断是否存在文章记录来减少查询次数
@jump2 是可以,看自己个人的写法了。一般我喜欢 exist 和 find 分开。
已经连续看了好几篇了,作者真的挺用心的! 赞~ 👍👍👍
感谢支持!
DeleteArticle 方法里面的
.Delete(Article{})
改为传引用.Delete(&Article{})
会不会好一些?
@FicowShen 看团队规范,想达到效果就是 OK 的。
真的是保姆级教程,大赞,解释说明也很详细,赞赞赞👍🏻👍🏻👍🏻
很棒啊,我这个棒槌,纸质书都买了四本,还不如这篇文档来的直接。纸质书都是打基础的前提下,每晚翻阅。这个就是增加了入门go的信心,感谢感谢
这一遍是一行一行敲下来的,反正肯定能完美运行。再撸几遍就自己上手项目了
到此,我已经用thinkgin 来写了一遍这套代码,核心都是煎鱼的代码,目录结构改成了thinkphp类似的结构,我称之为thinkgin。O(∩_∩)O哈哈~ 仓库在这 https://gitee.com/cww0128/thinkgin.git
很详细,赞!
您的来信已经收到,我会尽快处理,谢谢!!Thank you for your email.
这是来自QQ邮箱的假期自动回复邮件。 您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
var state int = -1
if arg := c.Query("state"); arg != "" {
state = com.StrTo(arg).MustInt()
valid.Range(state, 0, 1, "state").Message("状态只允许0或1")
}
valid.Range(state, 0, 1, "state").Message("状态只允许0或1") 这个有点问题,请求链接上填入state=123,验证不过,state改为1或者0还是验证不过,只要验证失败一次,输入正确值类型就都会验证不过,请问这是啥原因? 例子:
先 127.0.0.1:8000/api/v1/articles/1?tag_id=5&title=test1&desc=test-desc&content=test-content&created_by=test-created&state=13&modified_by=qweqwe 请求不过,正常;
再127.0.0.1:8000/api/v1/articles/1?tag_id=5&title=test1&desc=test-desc&content=test-content&created_by=test-created&state=1&modified_by=qweqwe 还是请求不过,两条就sate不一样,没有重启go run main.go
您的来信已经收到,我会尽快处理,谢谢!!Thank you for your email.
看到这个教程很开心,但是有个疑问,作者为什么不将参数绑定到结构体中,每次通过c.query来赋值,不觉得很累么, 如果是新增,不允许参数为"" 不是很理解,就算空串又怎样,数据库会报错么?
这是来自QQ邮箱的自动回复邮件。 你好,我已经收到你的邮件,但未查看,待查看后回复你~
您的来信已经收到,我会尽快处理,谢谢!!Thank you for your email.
您的来信已经收到,我会尽快处理,谢谢!!Thank you for your email.