使用 Gin 框架在 GoLang 中构建 API 服务
使用 Gin 框架在 GoLang 中构建 API 服务
今天我将向你展示如何在 Go 中构建一个简单的 API 服务。我们的项目演示将是一个简单的作者和他们的图书库项目。
第一步:
首先,我们需要初始化我们的项目。我在用 JetBrains GoLand .
GoLand welcome screen
GoLand New Project
Initialized project
第二步:
现在我们需要安装所需的依赖项。在终端中运行以下命令:
去获取 -u github.com/gin-gonic/gin
第三步:
初始化 Gin 框架以监听 8080 端口。
// main.go 包主 进口 (
“github.com/gin-gonic/gin”
)
功能主要(){
路由器 := gin.Default()
router.Run("localhost:8080")
}
第四步:
现在我们需要为我们的后端服务创建模型。在这个演示中,我们只需要 Book 和 Author 模型。创建一个名为的新目录 模型 并在该文件夹中创建 作者.go 和 book.go 文件。
// 模型/book.go 封装模型
类型书结构{
ID 字符串`json:"id"`
名称字符串`json:"name"`
} // 模型/作者.go 封装模型
类型作者结构{
ID 字符串`json:"id"`
名称字符串`json:"name"`
书籍* []书籍`json:“书籍”`
}
第五步:
现在我们需要创建一个控制器来从 URL 端点访问我们的数据。
创建一个新目录, 控制器 , 并在一个新文件中 author_controller.go .
现在,我们将只创建一个骨架 作者控制器 并暂时跳过业务逻辑。
// 控制器/author_controller.go 包控制器
进口 (
“github.com/gin-gonic/gin”
)
func AuthorController(路由器 *gin.Engine) {
路径:=“/api/作者” router.GET(路径,函数(c *gin.Context){ }) router.GET(path+"/:id", func(c *gin.Context) { })
}
现在我们需要进入 main.go 文件并将我们的控制器连接到我们之前创建的路由器变量。
// main.go 进口 (
“作者-api/控制器”
“github.com/gin-gonic/gin”
) 功能主要(){
路由器 := gin.Default()
controller.AuthorController(router) // 添加这一行
路由器。运行(“本地主机:8082”)
}
第六步:
现在我们将实现我们的业务逻辑。我们需要将数据存储在某个地方,但在本教程中,我们不会为了简单起见而使用任何数据库。我们的数据将存储在内存中。
// 模型/作者.go var stephenKingBooks = []书{
书{ID:“1”,名称:“局外人”},
书{ID:“2”,名称:“写作”},
}
var 作者 = []作者{
Author{ID: "1", Name: "Stephen King", Books: &stephenKingBooks},
}
现在回到 author_controller.go .
// 控制器/author_controller.go ... router.GET(路径,函数(c *gin.Context){
作者 := model.Authors
c.IndentedJSON(http. _状态正常_ , 作者)
}) ...
代码说明:
-
我们获取数据并将其存储在
作者
多变的 -
我们以状态 ok (200) 和格式化(缩进)JSON 响应
// 控制器/author_controller.go ... router.GET(path+"/:id", func(c *gin.Context) {
authorId := c.Param("id")
var author model.Author
对于 _, previewAuthor := range model.Authors {
如果 previewAuthor.ID == authorId {
作者 = 预览作者
}
}
if (model.Author{}) == 作者 {
c.IndentedJSON(http. 状态未找到 , 无)
} 别的 {
c.IndentedJSON(http. 状态正常 , 作者)
}
}) ...
代码说明:
- 我们检索通过 URL 参数传递的 ID
- 我们遍历作者并检索与传递给我们请求的 ID 相同的作者
- 如果没有具有相同 ID 的作者,我们会以 status not found (404) 响应并返回 nil
- 如果存在具有相同 ID 的作者,我们将返回状态 ok (200) 和作者的对象
第七步:
如果你大老远来,我有好消息。我们结束了!
现在打开您的终端(确保您与 main.go 文件)并执行 去运行 main.go
命令来运行我们的项目。
我们的后端服务已上线 本地主机:8080
我们的端点位于 本地主机:8080/api/作者
完整的源代码在我的 GitHub .
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明