利用 go-restful 快速构建 RESTful 服务器

举报
宇宙之一粟 发表于 2022/10/27 14:22:48 2022/10/27
【摘要】 介绍go-restful 是一个用于在 go 中构建 RESTful web 服务的包。开源地址点此处,REST 要求开发人员遵循一组设计协议。使用 go-restful,我们可以分离 API 处理程序的逻辑并附加 REST 谓词。这样做的好处是,它通过查看代码清楚地告诉我们正在创建什么样的 API。在进入示例之前,我们需要使用 go-restful 为 RESTAPI 安装一个名为 SQL...

2.png

介绍

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 用于从JSONXML 读取路径参数、查询参数、头部参数,并转换为 Struct
  • 提供 Response API用于将 Struct 写入到 JSONXML 以及 Header
  • 支持对请求、响应流进行过滤和拦截。
  • 支持使用过滤器自动响应 OPTIONS请求和CORS(跨域)请求。
  • 支持使用 RecoverHandler 自定义处理 HTTP 500 错误。
  • 支持使用 ServiceErrorHandler 自定义处理路由错误产生 HTTP 404/405/406/415 等错误。
  • 支持对请求、响应的有效负载进行编码(例如:gzipdeflate)。
  • 支持使用 CompressorProvider注册自定义的 gzipdeflate 的读入器和输出器。
  • 支持使用 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。