emicklei/go-restful

GitHub: emicklei/go-restful

一个用于在 Go 语言中构建符合 REST 设计原则的 Web 服务框架,提供路由、请求响应处理及丰富的自定义扩展能力。

Stars: 5115 | Forks: 681

# go-restful 用于使用 Google Go 构建 REST 风格 Web Services 的 package [![Go Report Card](https://goreportcard.com/badge/github.com/emicklei/go-restful)](https://goreportcard.com/report/github.com/emicklei/go-restful) [![Go Reference](https://pkg.go.dev/badge/github.com/emicklei/go-restful.svg)](https://pkg.go.dev/github.com/emicklei/go-restful/v3) [![codecov](https://codecov.io/gh/emicklei/go-restful/branch/master/graph/badge.svg)](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服务, 日志审计