使用Gin开发Restful接口并进行自动化测试

概述

在之前的文章Golang持续集成与自动化测试和部署
简要介绍了如何快速搭建Api 微服务, 并进行DevOps集成。本文将进一步深入介绍,如果使用Gin实现Restful规范并进行自动化测试。

Restful

RESTful接口规范一文中,介绍了 Restful 及其规范。

Gin 是一个性能优异的微服务框架,对于Restful有着良好的支持。因为基于此实现Restful并不困难。

Restful 中的核心在于对于资源的定义和使用,和对 HTTP 动词(GET, PUT, DELETE, POST, DELETE, OPTIONS)的充分使用,通过 HTTP 动词,免去了繁冗的接口方法定义。
例如,传统方式如果实现删除文章功能,则需要实现一个类似 post/delete?id=6 的方法, 如果使用 Restful, 则使用 DELETE post/1 形式,其中 DELETE是动词,代表删除操作,
post/1 代表单个文章资源。

Restful 中的另一大规法是对于状态码的充分使用,不再使用响应内容表明状态。如200代表成功,404代表资源不存在,204代表删除成功,201代表创建成功。
有了状态码,响应内容中不再需要使用单独的字段来标记结果的状态(如 {result: “success”} )。

这样的一大好处是实现方式更规范、统一和直观。只要知道资源定义(posts), 就可以猜测出该如何进行增删改查的操作,不再需要知道方法名。
如此一来,可以很轻松的封装出一套同意的方法和操作。

路由定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14

package router

import (
"os"
"gitlab.com/zacksleo/project/controllers"
"github.com/gin-gonic/gin"
)

api.GET("/customers", controllers.GetCustomers)
api.GET("/customers/:id", controllers.GetCustomer)
api.POST("/customers", controllers.CreateCustomer)
api.PUT("/customers/:id", controllers.UpdateCustomer)
api.DELETE("/customers/:id", controllers.DeleteCustomer)

下面一个较为完整的案例 controllers/customer.go

自动化测试

当实现了接口发后,为了验证接口运行正常,确保接口可靠和可用性,建议你对接口进行HTTP测试。
这里使用 httpexpect 对api进行测试,该库对响应的数据类型和结构验证有着较好的支持。

Thanks for reading.