emicklei/go-restful
GitHub: emicklei/go-restful
一个用于在 Go 语言中构建符合 REST 设计原则的 Web 服务框架,提供路由、请求响应处理及丰富的自定义扩展能力。
Stars: 5115 | Forks: 681
# go-restful
用于使用 Google Go 构建 REST 风格 Web Services 的 package
[](https://goreportcard.com/report/github.com/emicklei/go-restful)
[](https://pkg.go.dev/github.com/emicklei/go-restful/v3)
[](https://codecov.io/gh/emicklei/go-restful)
- [使用 v3 的代码示例](https://github.com/emicklei/go-restful/tree/v3/examples)
REST 要求开发者显式地使用 HTTP methods,并且使用方式要与协议定义保持一致。这个基本的 REST 设计原则在创建、读取、更新和删除(CRUD)操作与 HTTP methods 之间建立了一对一的映射。根据此映射:
- GET = 检索资源的表示
- POST = 创建,如果您将内容发送到服务器,目的是使用某种服务器端算法创建指定资源集合的下属资源。
- PUT = 创建,如果您发送的是指定资源的完整内容(URI)。
- PUT = 更新,如果您正在更新指定资源的完整内容。
- DELETE = 删除,如果您请求服务器删除该资源
- PATCH = 更新资源的部分内容
- OPTIONS = 获取有关该请求 URI 的通信选项的信息
### 用法
#### 不使用 Go Modules
`master` 分支上直至 `v2.*.*` 的所有版本均不支持 Go modules。
```
import (
restful "github.com/emicklei/go-restful"
)
```
#### 使用 Go Modules
从 `v3.0.0` 版本(在 v3 分支上)开始,此 package 支持 Go modules。
```
import (
restful "github.com/emicklei/go-restful/v3"
)
```
### 示例
```
ws := new(restful.WebService)
ws.
Path("/users").
Consumes(restful.MIME_XML, restful.MIME_JSON).
Produces(restful.MIME_JSON, restful.MIME_XML)
ws.Route(ws.GET("/{user-id}").To(u.findUser).
Doc("get a user").
Param(ws.PathParameter("user-id", "identifier of the user").DataType("string")).
Writes(User{}))
...
func (u UserResource) findUser(request *restful.Request, response *restful.Response) {
id := request.PathParameter("user-id")
...
}
```
[UserResource 的完整 API](https://github.com/emicklei/go-restful/blob/v3/examples/user-resource/restful-user-resource.go)
### 特性
## 如何自定义
go-restful package 提供了几个 hook 用于自定义行为。
- 路由算法
- Panic 恢复
- JSON 解码器
- Trace 日志
- 压缩
- 用于其他序列化器的编码器
- 使用 package 变量 `TrimRightSlashEnabled`(默认为 true)来控制匹配以斜杠 `/` 结尾的路由行为
## 资源
- [示例程序](./examples)
- [博客上发布的示例](http://ernestmicklei.com/2012/11/go-restful-first-working-example/)
- [博客上的设计说明](http://ernestmicklei.com/2012/11/go-restful-api-design/)
- [sourcegraph](https://sourcegraph.com/github.com/emicklei/go-restful)
- [展示:Zazkia - 用于测试弹性的 TCP 代理](https://github.com/emicklei/zazkia)
- [展示:Mora - MongoDB REST Api 服务器](https://github.com/emicklei/mora)
© 2012 - 2023, http://ernestmicklei.com. MIT License. 欢迎贡献。
标签:API框架, Go, Homebrew安装, RESTful, Ruby工具, Syscall, Web开发, Web服务, 日志审计