文章转发在专业的 Go 开发者社区,原始链接: https:// learnku.com/golang
今天我将用 golang 编程语言来为我们的 Todo 应用搭建一套简单的 API。我将会使用 Golang 中简便/快捷的 gin-gonic 框架配合用于操作我们数据库,优雅漂亮的 ORM gorm 来完成这项工作。要想安装这些包,你应当在工作目录 $GOPATH/src
下运行如下命令:
$ go get gopkg.in/gin-gonic/gin.v1
$ go get -u github.com/jinzhu/gorm
$ go get github.com/go-sql-driver/mysql
在一般的 crud 应用中我们需要如下这样的 API :
- POST todos/
- GET todos/
- GET todos/{id}
- PUT todos/{id}
- DELETE todos/{id}
我们开始编码吧,去到你的 $GOPATH/src 目录下,创建一个 todo 文件夹。在 todo 文件夹下创建一个名为 main.go 的文件。引入 "gin framework" 到我们的项目中,然后在 main
方法中创建一个类似下面的路由。我比较倾向把 api 前缀写成类似 "api/v1/" 这样,这就是我们使用 Group 方法的原因。
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
v1 := router.Group("/api/v1/todos")
{
v1.POST("/", createTodo)
v1.GET("/", fetchAllTodo)
v1.GET("/:id", fetchSingleTodo)
v1.PUT("/:id", updateTodo)
v1.DELETE("/:id", deleteTodo)
}
router.Run()
}
我们已经创建了五个路由,它们对应的功能处理函数类似 createTodo, fetchAllTodo
等这样。接下来我们会讨论它们。
现在我们需要配置数据库连接。使用数据库前需要引入 gorm 和 mysql dialects 2个软件包。 如下代码:
package main
import (
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
var db *gorm.DB
func init() {
//open a db connection
var err error
db, err = gorm.Open("mysql", "root:12345@/demo?charset=utf8&parseTime=True&loc=Local")
if err != nil {
panic("failed to connect database")
}
//Migrate the schema
db.AutoMigrate(&todoModel{})
}
上面代码中 mysql
是数据库驱动,root
是数据库用户名,12345
是密码,demo
则是数据库名称。请修改你的数据库连接信息即可。
接下来我们开始编写建立数据库连接相关的代码。首先我们创建2个结构体,命名为 todoModel
、transformedTodo
,第一个结构体代表原始的 Todo
数据库字段,第二个结构体用来定义向 api
返回的字段。我们之所以在第二个结构体中重新定义返回的字段主要考虑到数据库中数据的安全性,我们不希望将数据库中的原始字段名(如:updated_at
, created_at
)直接暴露客户端。