blog icon indicating copy to clipboard operation
blog copied to clipboard

posts/go/gin/2018-02-13-api-03/

Open utterances-bot opened this issue 4 years ago • 27 comments

「连载四」Gin搭建Blog API's (三)

https://eddycjy.com/posts/go/gin/2018-02-13-api-03/

utterances-bot avatar May 12 '20 09:05 utterances-bot

很好的系列教程。

stevefoxuser avatar May 12 '20 09:05 stevefoxuser

@stevefoxuser 有问题欢迎随时沟通。

eddycjy avatar May 17 '20 07:05 eddycjy

@eddycjy 大标题【定义接口】这里,获取指定文章:POST("/articles/:id”),获取制定文章应该是GET吧?

FicowShen avatar Jun 03 '20 00:06 FicowShen

已经连续看了好几篇了,作者真的挺用心的! 赞~ 👍👍👍

FicowShen avatar Jun 03 '20 00:06 FicowShen

DeleteArticle 方法里面的 .Delete(Article{}) 改为传引用 .Delete(&Article{}) 会不会好一些?

FicowShen avatar Jun 03 '20 00:06 FicowShen

为了方便展示我选用了 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

FicowShen avatar Jun 03 '20 00:06 FicowShen

//获取单个文章 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 avatar Jul 14 '20 07:07 jump2

"data" : make(map[string]string), 为什么要这样写??

yeyang666 avatar Apr 28 '21 07:04 yeyang666

通俗易懂,给作者点赞👍

lyne007 avatar Jun 04 '21 10:06 lyne007

通俗易懂,给作者点赞👍

@lyne007 感谢支持 😄

eddycjy avatar Jun 14 '21 09:06 eddycjy

"data" : make(map[string]string), 为什么要这样写??

@yeyang666 具体指的哪一块代码?如果单指这一句代码的话,主要是为了初始化 map。

eddycjy avatar Jun 14 '21 09:06 eddycjy

//获取单个文章 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 分开。

eddycjy avatar Jun 14 '21 09:06 eddycjy

已经连续看了好几篇了,作者真的挺用心的! 赞~ 👍👍👍

感谢支持!

eddycjy avatar Jun 14 '21 09:06 eddycjy

DeleteArticle 方法里面的 .Delete(Article{}) 改为传引用 .Delete(&Article{}) 会不会好一些?

@FicowShen 看团队规范,想达到效果就是 OK 的。

eddycjy avatar Jun 14 '21 09:06 eddycjy

真的是保姆级教程,大赞,解释说明也很详细,赞赞赞👍🏻👍🏻👍🏻

wkai666 avatar Jul 06 '21 12:07 wkai666

很棒啊,我这个棒槌,纸质书都买了四本,还不如这篇文档来的直接。纸质书都是打基础的前提下,每晚翻阅。这个就是增加了入门go的信心,感谢感谢

bigdllmask1333 avatar Sep 10 '21 01:09 bigdllmask1333

这一遍是一行一行敲下来的,反正肯定能完美运行。再撸几遍就自己上手项目了

bigdllmask1333 avatar Sep 17 '21 10:09 bigdllmask1333

到此,我已经用thinkgin 来写了一遍这套代码,核心都是煎鱼的代码,目录结构改成了thinkphp类似的结构,我称之为thinkgin。O(∩_∩)O哈哈~ 仓库在这 https://gitee.com/cww0128/thinkgin.git

bigdllmask1333 avatar Nov 07 '21 06:11 bigdllmask1333

很详细,赞!

Gao-Jinhui avatar Dec 08 '21 04:12 Gao-Jinhui

您的来信已经收到,我会尽快处理,谢谢!!Thank you for your email.

ljw4010 avatar Dec 08 '21 04:12 ljw4010

这是来自QQ邮箱的假期自动回复邮件。   您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。

guobingithub avatar Dec 08 '21 04:12 guobingithub

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

Joker-smile avatar Jun 21 '22 07:06 Joker-smile

您的来信已经收到,我会尽快处理,谢谢!!Thank you for your email.

ljw4010 avatar Jun 21 '22 07:06 ljw4010

看到这个教程很开心,但是有个疑问,作者为什么不将参数绑定到结构体中,每次通过c.query来赋值,不觉得很累么, 如果是新增,不允许参数为"" 不是很理解,就算空串又怎样,数据库会报错么?

DT0352 avatar Jul 09 '22 14:07 DT0352

这是来自QQ邮箱的自动回复邮件。  你好,我已经收到你的邮件,但未查看,待查看后回复你~

Joker-smile avatar Jul 09 '22 14:07 Joker-smile

您的来信已经收到,我会尽快处理,谢谢!!Thank you for your email.

ljw4010 avatar Jul 09 '22 14:07 ljw4010

您的来信已经收到,我会尽快处理,谢谢!!Thank you for your email.

ljw4010 avatar Oct 11 '22 07:10 ljw4010