Add return types to PUT, POST and PATCH methods.

Also add return types for proxy and redirect handlers.
This commit is contained in:
Brendan Burns 2015-04-08 19:47:31 -07:00
parent e44ec497ed
commit 8694f6f550
7 changed files with 3506 additions and 390 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -87,6 +87,7 @@ func (a *APIInstaller) newWebService() *restful.WebService {
ws.Consumes("*/*")
ws.Produces(restful.MIME_JSON)
ws.ApiVersion(a.group.Version)
return ws
}
@ -158,19 +159,24 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
return err
}
var versionedDeleterObject runtime.Object
var versionedDeleterObject interface{}
switch {
case isGracefulDeleter:
object, err := a.group.Creater.New(serverVersion, "DeleteOptions")
objectPtr, err := a.group.Creater.New(serverVersion, "DeleteOptions")
if err != nil {
return err
}
versionedDeleterObject = object
versionedDeleterObject = indirectArbitraryPointer(objectPtr)
isDeleter = true
case isDeleter:
gracefulDeleter = rest.GracefulDeleteAdapter{deleter}
}
versionedStatusPtr, err := a.group.Creater.New(serverVersion, "Status")
if err != nil {
return err
}
versionedStatus := indirectArbitraryPointer(versionedStatusPtr)
var getOptions runtime.Object
var getOptionsKind string
if isGetterWithOptions {
@ -339,6 +345,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
Doc("read the specified "+kind).
Operation("read"+kind).
Produces(append(storageMeta.ProducesMIMETypes(action.Verb), "application/json")...).
Returns(http.StatusOK, "OK", versionedObject).
Writes(versionedObject)
if isGetterWithOptions {
if err := addObjectParams(ws, route, getOptions); err != nil {
@ -353,6 +360,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
Doc("list objects of kind "+kind).
Operation("list"+kind).
Produces("application/json").
Returns(http.StatusOK, "OK", versionedList).
Writes(versionedList)
if err := addObjectParams(ws, route, versionedListOptions); err != nil {
return err
@ -371,7 +379,9 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
Doc("replace the specified "+kind).
Operation("replace"+kind).
Produces(append(storageMeta.ProducesMIMETypes(action.Verb), "application/json")...).
Reads(versionedObject)
Returns(http.StatusOK, "OK", versionedObject).
Reads(versionedObject).
Writes(versionedObject)
addParams(route, action.Params)
ws.Route(route)
case "PATCH": // Partially update a resource
@ -381,7 +391,9 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
Consumes(string(api.JSONPatchType), string(api.MergePatchType), string(api.StrategicMergePatchType)).
Operation("patch"+kind).
Produces(append(storageMeta.ProducesMIMETypes(action.Verb), "application/json")...).
Reads(versionedObject)
Returns(http.StatusOK, "OK", "string").
Reads("string").
Writes(versionedObject)
addParams(route, action.Params)
ws.Route(route)
case "POST": // Create a resource.
@ -390,7 +402,9 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
Doc("create a "+kind).
Operation("create"+kind).
Produces(append(storageMeta.ProducesMIMETypes(action.Verb), "application/json")...).
Reads(versionedObject)
Returns(http.StatusOK, "OK", versionedObject).
Reads(versionedObject).
Writes(versionedObject)
addParams(route, action.Params)
ws.Route(route)
case "DELETE": // Delete a resource.
@ -398,7 +412,9 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
Filter(m).
Doc("delete a "+kind).
Operation("delete"+kind).
Produces(append(storageMeta.ProducesMIMETypes(action.Verb), "application/json")...)
Produces(append(storageMeta.ProducesMIMETypes(action.Verb), "application/json")...).
Writes(versionedStatus).
Returns(http.StatusOK, "OK", versionedStatus)
if isGracefulDeleter {
route.Reads(versionedDeleterObject)
}
@ -411,6 +427,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
Doc("watch changes to an object of kind "+kind).
Operation("watch"+kind).
Produces("application/json").
Returns(http.StatusOK, "OK", watchjson.WatchEvent{}).
Writes(watchjson.WatchEvent{})
if err := addObjectParams(ws, route, versionedListOptions); err != nil {
return err
@ -424,6 +441,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
Doc("watch individual changes to a list of "+kind).
Operation("watch"+kind+"list").
Produces("application/json").
Returns(http.StatusOK, "OK", watchjson.WatchEvent{}).
Writes(watchjson.WatchEvent{})
if err := addObjectParams(ws, route, versionedListOptions); err != nil {
return err
@ -436,7 +454,8 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
Doc("redirect GET request to " + kind).
Operation("redirect" + kind).
Produces("*/*").
Consumes("*/*")
Consumes("*/*").
Writes("string")
addParams(route, action.Params)
ws.Route(route)
case "PROXY": // Proxy requests to a resource.
@ -694,7 +713,8 @@ func addProxyRoute(ws *restful.WebService, method string, prefix string, path st
Doc("proxy " + method + " requests to " + kind).
Operation("proxy" + method + kind).
Produces("*/*").
Consumes("*/*")
Consumes("*/*").
Writes("string")
addParams(proxyRoute, params)
ws.Route(proxyRoute)
}
@ -711,7 +731,7 @@ func addParams(route *restful.RouteBuilder, params []*restful.Parameter) {
// Go JSON behavior for omitting a field) become query parameters. The name of the query parameter is
// the JSON field name. If a description struct tag is set on the field, that description is used on the
// query parameter. In essence, it converts a standard JSON top level object into a query param schema.
func addObjectParams(ws *restful.WebService, route *restful.RouteBuilder, obj runtime.Object) error {
func addObjectParams(ws *restful.WebService, route *restful.RouteBuilder, obj interface{}) error {
sv, err := conversion.EnforcePtr(obj)
if err != nil {
return err