如果您正在编写任何形式的 Web 应用程序,那么您很可能会与 1 个或多个 REST API 交互,以填充应用程序的动态部分并执行诸如更新或删除数据库中的数据之类的任务。

GETPOSTDELETEPUTCRUD
CRUD

如果您想了解有关如何使用 Go 与数据库交互的更多信息,可以查看以下文章:

源代码- 本文的完整源代码可以在这里找到:
TutorialEdge/create-rest-api-in-go-tutorial

先决条件

  • 您需要在开发机器上安装 Go 1.11+ 版本。

目标

POSTGETPUTDELETE

视频教程

REST 架构

如今,REST 无处不在,从网站到企业应用程序,RESTful 架构风格是一种在独立软件组件之间提供通信的强大方式。构建 REST API 可让您轻松分离消费者和生产者,并且通常设计为无状态。

注 -如果您想了解有关 REST API 基础知识的更多信息,请查看什么是 RESTful API?

JSON

出于本教程的目的,我将使用 JavaScript 对象表示法作为发送和接收所有信息的方式,幸运的是 Go 为使用标准库包 encoding/json 对这些格式的编码和解码提供了一些出色的支持。

注意 -有关 encoding/json 包的更多信息,请查看官方文档:
encoding/json

编组

为了让我们更容易我们可以通过使用称为编组的东西轻松地将 GO 中的数据结构转换为 JSON,它会生成一个字节切片,其中包含一个非常长的字符串,没有多余的空白。

基本 API 入门

main.gomain.gohomePagehandleRequestsmain

main.go


http://localhost:10000/Welcome to the HomePage!
注意 -如果您想要更深入的关于如何创建基于 Go 的 Web 服务器的教程,请在此处查看本教程:
Creating a Simple Web Server with Go(Lang)

我们的文章结构

CREATEREADUPDATEDELETECRUD
ArticleArticle


"encoding/json"
mainArticles


/articles

检索所有文章

HTTP GET
returnAllArticlesArticles

main.go


json.NewEncoder(w).Encode(article)
handleRequestshttp://localhost:10000/articles


go run main.gohttp://localhost:10000/articles

http://localhost:10000/articles 响应


我们已经成功定义了我们的第一个 API 端点。

gorilla/muxnet/http
HTTP

路由器入门

现在标准库足以提供让您自己的简单 REST API 启动和运行所需的一切,但是现在我们已经掌握了基本概念,我觉得是时候引入第三方路由器包了。最著名和使用率最高的是
gorilla/mux 路由器,它目前在 Github 上有 2,281 颗星。

构建我们的路由器

main.gogorilla/muxHTTP
handleRequests

main.go


当您现在运行它时,您不会看到我们系统的工作方式发生真正的变化。它仍然会在同一个端口上启动并返回相同的结果,具体取决于您点击的端点。

唯一真正的区别是我们现在有一个 gorilla/mux 路由器,它允许我们在本教程后面轻松地执行诸如检索路径和查询参数之类的操作。

$ 去运行 main.go

路径变量

到目前为止一切顺利,我们已经创建了一个非常简单的 REST API,它返回一个主页和我们所有的文章。但是如果我们只想查看一篇文章会发生什么?

handleRequests()/articles


{id}Article


mainIdArticles


returnSingleArticle{id}


http://localhost:1000/article/1Key: 1
key


go run main.gohttp://localhost:10000/article/1

http://localhost:10000/article/1 响应


1

创建和更新文章

CreateUpdateDELETECRUDR

创建新文章

再一次,您将需要创建一个新函数来完成创建这篇新文章的工作。

createNewArticle()main.go


handleRequests.Methods("POST")HTTP POST


HTTP POSTPOST


我们的端点将触发并随后回显请求正文中的任何值。

createNewArticleArticleArticles


POSTArticles
http://localhost:10000/articles

http://localhost:10000/articles 响应


Create

在本教程的下一部分中,您将了解如何添加新的 API 端点以允许您删除文章。

删除文章

DELETE
HTTP DELETEId
main.godeleteArticle


handleRequestsdeleteArticle


HTTP DELETEhttp://localhost:10000/article/2http://localhost:10000/articlesHTTP GETArticle
注意- 为简单起见,我们正在更新一个全局变量。但是,我们不会进行任何检查以确保我们的代码没有竞争条件。为了使这段代码线程安全,我建议查看我关于Go Mutexes 的其他教程

更新文章端点

HTTP PUTIdHTTP DELETE
HTTP PUT

挑战

updateArticlehandleRequestsPUTupdateArticleHTTPcreateNewArticle
Articles

结论

这个例子代表了一个使用 Go 编写的非常简单的 RESTful API。在实际项目中,我们通常会将其与数据库联系起来,以便我们返回真实值。



本文使用 文章同步助手 同步