client/vendor/github.com/emicklei/go-restful
knative-automation 72aeb1c820
upgrade to latest dependencies (#1207)
bumping knative.dev/hack 8d623a0...8368e1f:
  > 8368e1f guard against set -o unset (# 49)
  > 2b4f6fc disable go's proxy and sumdb only for knative deps (# 47)
bumping knative.dev/networking 8b522a9...e24bdfe:
  > e24bdfe upgrade to latest dependencies (# 350)
  > ab1235e Bump a few assorted dependencies to their latest versions (# 349)
  > 45b7ed1 Add ingress conformance test to ensure we do not add retries (# 348)
  > b61da13 upgrade to latest dependencies (# 347)
  > d2088ff Update common github actions (# 346)
  > c069ad2 Create prober request with context right away (# 344)
  > 342a3fb upgrade to latest dependencies (# 342)
  > 94433ab upgrade to latest dependencies (# 341)
bumping knative.dev/pkg 6040b3a...a02dcff:
  > a02dcff Bump a few assorted dependencies to their latest versions (# 2013)
  > 4b2ae07 Replace deprecated github.com/markbates/inflect with github.com/gobuffalo/flect (# 2014)
  > 8878069 upgrade to latest dependencies (# 2010)
  > c493a9e Update common github actions (# 2009)
  > 6045ed4 Allow setting DisableCompression in NewAutoTransport (# 2007)
  > ca02ef7 Genreconciler properly generates reconciler for Resources with Status (# 2004)
  > 0d31134 Fix nil pointer panic in kvstore (# 2002)
bumping knative.dev/serving e61294b...8751d91:
  > 8751d91 Split the reconcile rollout into its own function (# 10722)
  > 2b95084 Optimize the execution path around logging (# 10720)
  > bbca20f Update net-contour nightly (# 10715)
  > ef39273 upgrade to latest dependencies (# 10719)
  > 6449fb8 upgrade to latest dependencies (# 10717)
  > 45a435a Update net-kourier nightly (# 10706)
  > 2fbef5f upgrade to latest dependencies (# 10713)
  > c4ea4ad Fix the analyzer config for load-testing benchmark since it must have a value (# 10709)
  > 6f46354 Apply k8s default values for readiness probe (# 10700)
  > 8c4b2ff Update net-certmanager nightly (# 10705)
  > b6f618b Update net-istio nightly (# 10704)
  > 390f2c2 bump k8s min in DEVELOPMENT.md (# 10699)
  > f2ccdd5 tests (# 10702)
  > 2090edf Update net-istio nightly (# 10695)
  > 789455d Update net-certmanager nightly (# 10674)
  > 1c61d3b Update common github actions (# 10697)
  > 2bc3650 Update net-kourier nightly (# 10696)
  > 8c64d92 Format markdown (# 10698)
  > 0e77ab2 Update net-kourier nightly (# 10676)
  > dd96a0a Update net-contour nightly (# 10686)
  > 8fbcfb0 Unpin the istio version and temporarily disable the error rate check analyzer (# 10655)
  > 58550fd Avoid adding gzip-encoding to requests implicitly (# 10691)
  > 60cdc35 Move Multi Container test to Beta (# 10683)
  > ae7b278 Update net-istio nightly (# 10687)
  > 7a18f38 Fix some nits in e2e tests (# 10678)
  > 9c572cd Allow to specify build platform for test images (# 10672)
  > 0ee79dd Remove the unsed struct items (# 10684)
  > 29da3af Improve debuggability of SKS logs (# 10679)
  > 8e1d587 upgrade to latest dependencies (# 10682)
  > aef0145 Temporarily disable auto TLS test with HTTP01 challenge  (# 10685)
  > 32b0292 Use lister instead of client to directly get ClusterDomainClaim (# 10677)
  > a19ff15 Update net-istio nightly (# 10675)
  > 6313088 Allow kpa to work with timeout in context (# 10673)
  > af7af61 Perform some test helper cleanup (# 10670)
  > 93d2449 upgrade to latest dependencies (# 10671)
  > 888331e Remove the service name from the internal traffic target object. (# 10669)
  > 1901e4c Use consistent alias for autoscaler v1alpha1 everywhere (# 10666)
  > 1e070a3 Remove context from MakeDecider (# 10657)
  > 452bed5 Further remove usage of the context in the scale runner (# 10653)
  > a1ee2ec bump ggcr & k8schain (# 10651)
  > 81818f9 Fix logging of errors in stats scraper (# 10654)
  > 1b0f43c Hide implementation detail inside a function (# 10652)
  > 756fd17 Update net-istio nightly (# 10648)
  > 6d46d52 Add support for decoding Revision from Host. (# 10647)
  > 01fa1a0 Remove the time computation (# 10645)
  > dbccf2a Do not pass context to the scale, but logger instead (# 10646)
  > ab176fa Rename back to the non deprecated name (# 10640)
  > fae6549 Update net-contour nightly (# 10644)
  > 5cd4f64 Update net-istio nightly (# 10643)
  > fbbbb98 Make route stop using the `DeprecatedServiceName` field (# 10638)
  > bf35e3f 💄 updating the HPAs to v2beta2 API usage (# 10631)
  > 51a9c0b Update net-certmanager nightly (# 10636)
  > e5c5c08 Export MESH env value in test script (# 10635)
  > 4a3274c Remove unused constants, make some other small tidy-ups (# 10637)
  > b083383 fix the broken doc's link (# 10634)
  > aac0df2 Deprecate the service name on the revision. (# 10633)
  > 0aa3d0b Remove the propagation from SKS->PA->Rev.Status of the K8s service (# 10632)
  > db90f4f Update net-contour nightly (# 10597)
  > 981c601 Update net-istio nightly (# 10619)
  > 8922f35 Update net-kourier nightly (# 10599)
  > df11c15 chore: Set background to white for autoscaling diagrams ... (# 10629)
  > f637b5a Remove naked returns (# 10618)
  > 6cde241 Improve rollout test to check duration (# 10625)
  > 7700811 At 100ms we still see failures on prow (# 10626)
  > c081a82 Make the singlethreaded code simpler by using boolean guard (# 10624)
  > 55a7edf upgrade to latest dependencies (# 10627)
  > 53d4d5b Fix some annoying nits in the route e2e tests (# 10623)
  > 2c781c7 upgrade to latest dependencies (# 10620)
  > 6dba44a The year was 2021.. (# 10621)
  > 39d33bf upgrade to latest dependencies (# 10617)
bumping golang.org/x/term 7de9c90...2321bbc:
  > 2321bbc Update doc to use "term" instead of "terminal"
  > ee85cb9 README.md: add badge to pkg.go.dev
bumping knative.dev/eventing ea452b5...3fcb645:
  > 3fcb645 🌀 Remvoing contrib refs (# 4855)
  > f05561d upgrade to latest dependencies (# 4853)
  > 37eaf71 switch Harwayne with antoineco (# 4850)
  > b887ac4 upgrade to latest dependencies (# 4848)
  > daa085d Format markdown (# 4846)
  > 3d51c72 Change trigger spec to indicate assigned broker should be immutable (# 4828)
  > 1774243 Add immutable fields validation to v1beta1 broker (# 4816)
  > 935d5fb Format markdown (# 4840)
  > 269b061 Update common github actions (# 4839)
  > 152e608 upgrade to latest dependencies (# 4841)
  > 8171448 Adding Logline for when a cloudevent has been successfully sent from APIServerSource to the sink (# 4723)
  > fd2688d Use SHOULD for TriggerSpec to keep compatibility (# 4838)
  > 1fa597e [# 4796] Bump golang lint timeout to 10m (# 4830)
  > a4a9f48 Format markdown (# 4829)
  > d58bd38 fix the link to head (# 4826)
  > 39d7a9e remove unused functions (# 4824)
  > 6edcbdd Panic in shared main to propagate error to exit code (# 4820)
  > 012a9bd v1beta1.Trigger delivery should be v1.DeliverySpec (# 4822)
  > 321a839 Format markdown (# 4823)
  > ec63881 Fix spec # 4515 (# 4654)
  > 1528750 upgrade to latest dependencies (# 4818)
  > 9dc57e2 Update common github actions (# 4817)
  > b20c96b sinkbing implement bindable (# 4794)
  > 8d51418 Bump golang linter version and timeout (# 4808)
  > f882ff0 Add availability rate to upgrade test report (# 4555)
  > a6635bb Patch HPA eventing-webhook min replicas (# 4811)
  > d46c1d0 It is already 2021 (# 4809)
  > fb8fbf7 Adding new source conformance testcase for CRD RBAC (# 4787)
  > 1725902 Update COMMUNITY_CONTACTS.md test grid link (# 4798)
  > b75d03a Adding new source conformance testcase for CRD Source Registry Spec (# 4780)
  > 77fc350 upgrade to latest dependencies (# 4797)

Signed-off-by: Knative Automation <automation@knative.team>
2021-02-09 10:04:50 -08:00
..
log chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
.gitignore upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
.travis.yml upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
CHANGES.md upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
LICENSE chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
Makefile upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
README.md upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
Srcfile chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
bench_test.sh chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
compress.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
compressor_cache.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
compressor_pools.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
compressors.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
constants.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
container.go upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
cors_filter.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
coverage.sh chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
curly.go upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
curly_route.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
custom_verb.go upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
doc.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
entity_accessors.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
filter.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
json.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
jsoniter.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
jsr311.go upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
logger.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
mime.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
options_filter.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
parameter.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
path_expression.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
path_processor.go upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
request.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
response.go upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
route.go upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
route_builder.go upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
router.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00
service_error.go upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
web_service.go upgrade to latest dependencies (#1207) 2021-02-09 10:04:50 -08:00
web_service_container.go chore: Update to Knative Serving 0.10.0 (#474) 2019-11-04 13:02:19 -08:00

README.md

go-restful

package for building REST-style Web Services using Google Go

Build Status Go Report Card GoDoc codecov

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

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"
)

Without Go Modules

All versions up to v2.*.* (on the master) are not supporting Go modules.

import (
	restful "github.com/emicklei/go-restful"
)

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")
	...
}

Full API of a UserResource

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 accesing 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

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 build this package using a tag, e.g. go build -tags=jsoniter .

TODO: write examples of these.

Resources

Type git shortlog -s for a full list of contributors.

© 2012 - 2020, http://ernestmicklei.com. MIT License. Contributions are welcome.