Update auto-generated files Signed-off-by: RainbowMango <qdurenhongcai@gmail.com> |
||
|---|---|---|
| .. | ||
| log | ||
| .gitignore | ||
| .goconvey | ||
| .travis.yml | ||
| CHANGES.md | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| SECURITY.md | ||
| Srcfile | ||
| bench_test.sh | ||
| compress.go | ||
| compressor_cache.go | ||
| compressor_pools.go | ||
| compressors.go | ||
| constants.go | ||
| container.go | ||
| cors_filter.go | ||
| coverage.sh | ||
| curly.go | ||
| curly_route.go | ||
| custom_verb.go | ||
| doc.go | ||
| entity_accessors.go | ||
| extensions.go | ||
| filter.go | ||
| filter_adapter.go | ||
| json.go | ||
| jsoniter.go | ||
| jsr311.go | ||
| logger.go | ||
| mime.go | ||
| options_filter.go | ||
| parameter.go | ||
| path_expression.go | ||
| path_processor.go | ||
| request.go | ||
| response.go | ||
| route.go | ||
| route_builder.go | ||
| route_reader.go | ||
| router.go | ||
| service_error.go | ||
| web_service.go | ||
| web_service_container.go | ||
README.md
go-restful
package for building REST-style Web Services using Google Go
REST asks developers to use HTTP methods explicitly and in a way that's consistent with the protocol definition. This basic REST design principle establishes a one-to-one mapping between create, read, update, and delete (CRUD) operations and HTTP methods. According to this mapping:
- GET = Retrieve a representation of a resource
- POST = Create if you are sending content to the server to create a subordinate of the specified resource collection, using some server-side algorithm.
- PUT = Create if you are sending the full content of the specified resource (URI).
- PUT = Update if you are updating the full content of the specified resource.
- DELETE = Delete if you are requesting the server to delete the resource
- PATCH = Update partial content of a resource
- OPTIONS = Get information about the communication options for the request URI
Usage
Without Go Modules
All versions up to v2.*.* (on the master) are not supporting Go modules.
import (
restful "github.com/emicklei/go-restful"
)
Using Go Modules
As of version v3.0.0 (on the v3 branch), this package supports Go modules.
import (
restful "github.com/emicklei/go-restful/v3"
)
Example
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")
...
}
Features
- Routes for request → function mapping with path parameter (e.g. {id} but also prefix_{var} and {var}_suffix) support
- Configurable router:
- (default) Fast routing algorithm that allows static elements, google custom method, regular expressions and dynamic parameters in the URL path (e.g. /resource/name:customVerb, /meetings/{id} or /static/{subpath:*})
- Routing algorithm after JSR311 that is implemented using (but does not accept) regular expressions
- Request API for reading structs from JSON/XML and accessing parameters (path,query,header)
- Response API for writing structs to JSON/XML and setting headers
- Customizable encoding using EntityReaderWriter registration
- Filters for intercepting the request → response flow on Service or Route level
- Request-scoped variables using attributes
- Containers for WebServices on different HTTP endpoints
- Content encoding (gzip,deflate) of request and response payloads
- Automatic responses on OPTIONS (using a filter)
- Automatic CORS request handling (using a filter)
- API declaration for Swagger UI (go-restful-openapi, see go-restful-swagger12)
- Panic recovery to produce HTTP 500, customizable using RecoverHandler(...)
- Route errors produce HTTP 404/405/406/415 errors, customizable using ServiceErrorHandler(...)
- Configurable (trace) logging
- Customizable gzip/deflate readers and writers using CompressorProvider registration
- Inject your own http.Handler using the
HttpMiddlewareHandlerToFilterfunction
How to customize
There are several hooks to customize the behavior of the go-restful package.
- Router algorithm
- Panic recovery
- JSON decoder
- Trace logging
- Compression
- Encoders for other serializers
- Use jsoniter by building this package using a build tag, e.g.
go build -tags=jsoniter . - Use the variable
MergePathStrategyto change the behaviour of composing the Route path given a root path and a local route path- versions >= 3.10.1 has set the value to
PathJoinStrategythat fixes a reported security issue but may cause your services not to work correctly anymore. - versions <= 3.9 had the behaviour that can be restored in newer versions by setting the value to
TrimSlashStrategy. - you can set value to a custom implementation (must implement MergePathStrategyFunc)
- versions >= 3.10.1 has set the value to
Resources
- Example programs
- Example posted on blog
- Design explained on blog
- sourcegraph
- showcase: Zazkia - tcp proxy for testing resiliency
- showcase: Mora - MongoDB REST Api server
Type git shortlog -s for a full list of contributors.
© 2012 - 2022, http://ernestmicklei.com. MIT License. Contributions are welcome.
