持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第 8 天,点击查看活动详情
介绍
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"
另外打开一个终端执行上面的 curl 命令,得到如下的输出:
可以看到成功打印出当前的时间信息,你如果按照我的方法,可以结果会不一样(因为是你当前运行这个程序的时间)。
更多有趣的 go-resutful 功能等待你的探索,我们今后可以再写其他文章进行研究,如果你也感兴趣,可以自己参考官方的示例。
参考链接: