七叶笔记 » golang编程 » 一步一步golang写后台(二)gin进阶

一步一步golang写后台(二)gin进阶

上一节我们讲解了gin的基本用法,这一次,我们同样奔着构建一个REST后台的目标,继续修改我们的代码。

 package main

import "github.com/gin-gonic/gin"

type Login struct {
	User     string `form:"user" json:"user" binding:"required"`
	Password string `form:"password" json:"password" binding:"required"`
}

func main() {
	router := gin.Default()

	// Simple group: v1
	v1 := router.Group("/v1")
	{
		v1.POST("/login", loginEndpoint)
	}

	router.Run(":8080")
}

func loginEndpoint(c *gin.Context) {
	var json Login
	if err := c.ShouldBindJSON(&json); err == nil {
		if json.User == "admin" && json.Password == "admin" {
			c.JSON(200, gin.H{"status": "login success"})
		} else {
			c.JSON(401, gin.H{"status": "login failed"})
		}
	} else {
		c.JSON(400, gin.H{"status": "bad input"})
	}
}
  

这里我们首先通过 router := gin.Default() 创建了一个default router,使用了默认的中间件。关于中间件的概念,我们后面教程会讲。

通常我们的API也是分版本的,这里我们注册了一个v1的group,后面随着迭代,可能会有v2版本。然后注册了一个API。

现在我们来试一试:

 $ go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:	export GIN_MODE=release
 - using code:	gin.SetMode(gin.ReleaseMode)

[GIN-debug] POST   /v1/login                 --> main.loginEndpoint (3 handlers)
[GIN-debug] Listening and serving HTTP on :8080  

我们打开另外一个窗口,使用httpie发送请求:

 $ http POST  user=admin password=admin
HTTP/1.1 200 OK
Content-Length: 26
Content-Type: application/json; charset=utf-8
Date: Tue, 09 Jun 2020 07:24:58 GMT

{
    "status": "login success"
}  

可以看到,已经访问成功了,再试试其他的用户名密码:

 $ http POST  user=admin password=test
HTTP/1.1 401 Unauthorized
Content-Length: 25
Content-Type: application/json; charset=utf-8
Date: Tue, 09 Jun 2020 07:25:53 GMT

{
    "status": "login failed"
}  

这里返回了401 Unauthorized的错误,符合预期。

这次我们主要介绍了3点:

  1. API分组
  2. 解析requests中的json数据
  3. 返回json数据已经http的状态码

相关文章