在这篇关于Go语言(也称为Golang)编程的文章中,我们将看到如何创建一个通过JSON进行通信的REST API,保存和显示来自MySQL / MariaDB数据库的数据。
最后,我们将有一个使用Go语言的REST API,使用4种方法。POST, PUT, DELETE和GET使用Mux路由器。我们还将实现数据库的4个操作:插入、更新、删除和选择。
我将在文章的最后留下完整的开放源代码。
数据库
我们将使用一个视频游戏数据库。因此,记得用你喜欢的名字创建一个数据库(我叫它video_games ),并在里面放置以下表格。
在Gist上查看代码。
我们要处理的数据是id为bigint,在映射到Go时将变成int64。名字和流派将是varchar类型,在Go中转换为字符串。最后,对于golang来说,年份将是一个int64类型的整数。
设置数据库访问凭证
你要做的第一件事是在名为.env 的文件中配置数据库的访问凭证。如果它不存在,你必须根据.env.example 文件来创建它。在我的例子中,它看起来像这样。
在Gist上查看代码。
从该文件中我们可以注意到几件事;所有这些都与MySQL数据库的访问凭证有关。
在这种情况下,我的用户是root,我没有密码;主机是3306端口的localhost,数据库的名称是video_games(记得从MySQL控制台或phpmyadmin创建它)。
环境文件将被读取并加载到变量中。在变量文件中,我们还定义了允许CORS的域,因为通过这种方式,我们可以从另一个域消费这个API。
在Gist上查看代码。
正如你所看到的,在第10行我们定义了与数据库的连接字符串。最后我们定义了帮助我们从Go连接到MySQL的函数。
查看Gist上的代码。
记住,我已经向你展示了如何用Go连接MySQL,但这个例子是通过使用控制台。
有用的结构和函数
在我们创建的所有API中,我们将处理视频游戏,以便以简单的方式进行示范。
为此,我们定义了Videogame结构,其字段与我们在数据库中定义的相同。反斜线之间的内容是表示从JSON中读取和解码时的属性名称。
在Gist上查看代码。
除了结构,我们还定义了一些工具,例如,一个从字符串转换为int64的函数,它将帮助我们从URL中读取变量并将其转换为整数。
查看Gist上的代码。
控制器
我不打算使用任何方法论或类似的东西;但我将模型的所有操作(CRUD)放在同一个文件中。它看起来像这样。
在Gist上查看代码。
所有的函数都至少返回一个错误类型的参数,这样就可以处理执行过程中可能发现的故障。此外,我们正在避免SQL注入,因为如果你注意到我们使用占位符而不是连接字符串。
顺便说一下,所有的函数都接收或返回我们前面看到的VideoGame 数据类型。这些函数是。
- createVideoGame - 在MySQL数据库中插入一个视频游戏
- deleteVideoGame - 使用Go删除一个视频游戏的ID。
- updateVideoGame - 更新数据库中的一个视频游戏
- getVideoGames - 以一个视频游戏类型的数组形式获取所有现有的视频游戏。
- getVideoGameById - 通过id获取一个视频游戏。
这些函数将通过路由器暴露出来,这就是我们 要用Go连接到MySQL来暴露或获取数据的地方。
用Go定义API路由
我们终于到了要用Go通过API暴露我们的控制器和数据库的地方。我们在路由器接收的函数中定义它们,通过这种方式,我们使事情变得更简单,并分离概念。
在Gist上查看代码。
基本上,它是配置用Go创建的API的端点,调用控制器函数。让我们看看下面的enableCORS,respondWithSuccess, 和respondWithError 函数。
一个重要的部分是将整个请求的主体 从JSON解码到结构中,你可以在第40行看到,我们从r.Body ,然后将其解码到之前创建的变量中。
我们以同样的方式(对请求的JSON进行解码)来进行更新,这在第56行。
CORS中间件
CORS允许你共享不同领域的资源。也就是说,它允许你从localhost: 80或类似的地方消费localhost: 8000;就像可以从google.com消费facebook.com那样的情况。
如果你不使用这个功能,只需注释掉路由器上使用它的代码。我们要做的是添加头信息,允许先前在变量中配置的域的CORS。
为了实现这一点,我们将拦截所有的请求,以添加这些头信息。
在Gist上查看代码。
回答HTTP客户端的问题
我们还有两个函数可以帮助我们回应消费API的客户端;一个是成功回应(HTTP代码200),另一个是以错误回应(代码500)。
响应错误的函数接收错误并将其显示为一个字符串。响应成功的函数接收一个interface类型的参数,这类似于Go中的一个通用数据类型。两个函数都将响应编码为JSON。
在Gist上查看代码。
把它放在一起
使用Go的API REST和MySQL的JSON编码
为了完成本教程,让我们看看main方法是什么样子的。这个方法是 Go中程序的入口,因此在这个函数中,我们要ping数据库,配置路由并在指定的端口上打开服务器。
在Gist上查看代码。
请记住,要进行编译,你必须安装Go。之后,在代码所在的目录中,运行go build ,并运行出现的文件。如果防火墙要求权限,就给它。以同样的方式,我在项目的readme中写了一些文档。
你可以通过任何编程语言或使用Postman来测试API,正如我在视频中所做的(西班牙语)。
这里是完整的代码,和往常一样。 在我的GitHub上.我也邀请你到 在我的博客上阅读更多关于Go的信息.
The postAPI REST with Go and MySQLappeared first onParzibyte's blog.
