如何用 Go 快速编写出 HTTP REST API 服务?( 二 )


$ go run internal/main.go2019/10/27 20:53:39 Listening on localhost:8080 ...为了测试你的HTTP服务,你可以使用curl命令来测试下 localhost:8080,或者直接用浏览器输入这个URL来测试:
$ curl localhost:8080Hello, "/"%很好,我们创建了一个小型的HTTP服务,它可以正常运行 。
现在我们可以在二进制可执行文件中构建它:
$ go build -o bin/http-go-server internal/main.go很好,我们在几分钟内完成了,但是我们将在下文深入了解:-) 。
4.使用 Makefile我不想手动执行每个命令,所以,为了持续改进我们的应用,好的方法就是创建一个Makefile 文件,这样我们就可以直接通过命令行来构建应用,生成文件,生成swagger文档,检查许可证以及执行单元测试和静态测试 。
我们可以在Makefile里面定义好一系列将由make工具执行的任务 。
因此,在这个项目中,我创建了一个Makefile文件,大家可以直接下载,这样就能节约大家的时间 。

Makefile:https://raw.githubusercontent.com/scraly/http-go-server/master/Makefile
出于好奇,在Makefile文件中,我们创建几个指令(targets,可以是目标文件或者执行文件或者标签)用来执行一个或者多个命令 。
总结下来就是,一个指令需要或者不需要依赖文件(prerequisites)都将执行方法(recipe):target: prerequisites 。
<TAB> recipe
在我创建的Makefile文件中,一个build指令构建和打包我们的应用为二进制文件,存放到目录bin/http-go-server下:
## Build all binaries build:$(GO) build -o bin/http-go-server internal/main.go5.HTTP Endpoints 定义现在我们将优化我们的HTTP服务,并使用Swagger,它可以处理我们的HTTP endpoints定义 。
什么是Swagger?
Swagger允许你提供符合OpenAPI规范的标准化APIs文档 。
因为有了Swagger应用,使用Swagger标准文件输入,你可以在最后生成代码,并且可以为用户提供HTML格式的API文档 。
如果你想构建一个公共API,请不要犹豫使用Swagger 。
Swagger安装:请参考go-swagger安装页面(https://github.com/go-swagger/go-swagger/blob/master/docs/install.md) 。
然后,为了检查该工具在你的系统中正确安装,你可以检查Swagger的版本 。
$ swagger version现在要做的第一件事是在我们的代码中创建swagger标准文档:
pkg/swagger/swagger.yml:
consumes:- application/jsoninfo:description: HTTP server in Go with Swagger endpoints definitiontitle: http-go-serverversion: 0.1.0produces:- application/jsonschemes:- httpswagger: "2.0"paths:/healthz:get:operationId: checkHealthproduces:- text/plainresponses:'200':description: OK messageschema:type: stringenum:- OK/hello/{user}:get:description: Returns a greeting to the user!parameters:- name: userin: pathtype: stringrequired: truedescription: The name of the user to greet.responses:200:description: Returns the greeting.schema:type: string400:description: Invalid characters in "user" were provided.每次修改swagger文件后,一个好的做法是检查文件的有效性 。
为此,我们可以使用swagger validate命令:
$ swagger validate pkg/swagger/swagger.yml2019/10/27 21:14:47The swagger spec at "pkg/swagger/swagger.yml" is valid against swagger specification 2.0或者可以使用一个Makefile指令:
$ make swagger.validate2019/10/27 21:15:12The swagger spec at "pkg/swagger/swagger.yml" is valid against swagger specification 2.0太棒了,我们的Swagger文件是有效的 。
现在我们将在HTML文档中创建Swagger定义 。为此,我们可以使用Docker镜像,该镜像考虑到了Swagger YAML定义并且返回一个漂亮的HTML页面 。
$ make swagger.doc如果你在浏览器中打开已经生成的doc/index.html页面,可以查看HTML endpoints定义:
如何用 Go 快速编写出 HTTP REST API 服务?

文章插图
如何用 Go 快速编写出 HTTP REST API 服务?

文章插图
如何用 Go 快速编写出 HTTP REST API 服务?

文章插图
很好,是具有可读性的 。
归功于Swagger规范,现在我们可以生成代码 。
为此,我们进入到pkg/swagger/目录,创建一个gen.go文件,如下所示:
package swagger//go:generate rm -rf server//go:generate mkdir -p server//go:generate swagger generate server --quiet --target server --name hello-api --spec swagger.yml --exclude-main由于有Makefile,我们可以执行生成swagger go代码的文件:
$ make generate==> generating go codeGOFLAGS=-mod=vendor go generate github.com.scraly/http-go-server/internal github.com.scraly/http-go-server/pkg/swagger


推荐阅读