利用 go-restful 快速构建 RESTful 服务器
【摘要】 介绍go-restful 是一个用于在 go 中构建 RESTful web 服务的包。开源地址点此处,REST 要求开发人员遵循一组设计协议。使用 go-restful,我们可以分离 API 处理程序的逻辑并附加 REST 谓词。这样做的好处是,它通过查看代码清楚地告诉我们正在创建什么样的 API。在进入示例之前,我们需要使用 go-restful 为 RESTAPI 安装一个名为 SQL...
介绍
go-restful 是一个用于在 go 中构建 RESTful web 服务的包。开源地址点此处,
REST 要求开发人员遵循一组设计协议。使用 go-restful,我们可以分离 API 处理程序的逻辑并附加 REST 谓词。这样做的好处是,它通过查看代码清楚地告诉我们正在创建什么样的 API。在进入示例之前,我们需要使用 go-restful 为 RESTAPI 安装一个名为 SQLite3 的数据库。安装步骤如下:
apt-get install sqlite3 libsqlite3-dev
或者在 Mac 上使用 brew
命令:
brew install sqlite3
然后通过 go get
命令安装 go-restful 包:
go get github.com/emicklei/go-restful
安装成功如图:
go-restful 特性
go-restful
具有以下特性:
- 支持可配置的请求路由,默认使用
CurlyRouter
快速路由算法,也支持RouterJSR311
。 - 支持在
URL path
上定义正则表达式,例如:/static/{subpath:*}
。 - 提供
Request API
用于从JSON
、XML
读取路径参数、查询参数、头部参数,并转换为Struct
。 - 提供
Response API
用于将Struct
写入到JSON
、XML
以及Header
。 - 支持对请求、响应流进行过滤和拦截。
- 支持使用过滤器自动响应
OPTIONS
请求和CORS(跨域)
请求。 - 支持使用
RecoverHandler
自定义处理HTTP 500
错误。 - 支持使用
ServiceErrorHandler
自定义处理路由错误产生HTTP 404/405/406/415
等错误。 - 支持对请求、响应的有效负载进行编码(例如:
gzip
、deflate
)。 - 支持使用
CompressorProvider
注册自定义的gzip
、deflate
的读入器和输出器。 - 支持使用
EntityReaderWriter
注册的自定义编码实现。 - 支持
Swagger UI
编写的 API 文档。 - 支持可配置的日志跟踪。
简单的服务器
然后可以通过简单的代码写一个服务器:
package main
import (
"fmt"
"io"
"net/http"
"time"
"github.com/emicklei/go-restful"
)
func main() {
// Create a web service
webservice := new(restful.WebService)
// Create a route and attach it to handler in the service
webservice.Route(webservice.GET("/ping").To(pingTime))
// Add the service to application
restful.Add(webservice)
http.ListenAndServe(":8000", nil)
}
func pingTime(req *restful.Request, resp *restful.Response) {
// Write to the response
io.WriteString(resp, fmt.Sprintf("%s", time.Now()))
}
然后可以通过运行代码:
go run main.go
服务器将在 localhost 的端口 8000 上运行。因此,我们可以发出 curl 请求或使用浏览器查看 GET 请求输出:
curl -X GET "http://localhost:8000/ping"
获得输出结果为:
总结
最终我们就通过 go-restful 成功创建了一个简易的 restful 服务器。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)