使用 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 模型。创建一个名为的新目录 模型 并在该文件夹中创建 作者.gobook.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. _状态正常_ , 作者)  
 }) ...

代码说明:

  1. 我们获取数据并将其存储在 作者 多变的

  2. 我们以状态 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. 状态正常 , 作者)
    }
    }) ...

代码说明:

  1. 我们检索通过 URL 参数传递的 ID
  2. 我们遍历作者并检索与传递给我们请求的 ID 相同的作者
  3. 如果没有具有相同 ID 的作者,我们会以 status not found (404) 响应并返回 nil
  4. 如果存在具有相同 ID 的作者,我们将返回状态 ok (200) 和作者的对象

第七步:

如果你大老远来,我有好消息。我们结束了!

现在打开您的终端(确保您与 main.go 文件)并执行 去运行 main.go 命令来运行我们的项目。

我们的后端服务已上线 本地主机:8080 我们的端点位于 本地主机:8080/api/作者

完整的源代码在我的 GitHub .

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/5832/09540100

posted @ 2022-09-01 00:12  哈哈哈来了啊啊啊  阅读(432)  评论(0编辑  收藏  举报