Cloud Controller API v3 Style Guide (Proposal)

Cloud Foundry

Asynchronicity

Asynchronicity

How to handle long operations

Collection Resources

Filtering

How to select some resources in a collection

Pagination

How to retrieve a range of resources in a collection

Collection

What is a collection (set) of resources

Retrieve a collection

How to get a collection or resources

Error handling

Error format

How to provide information about errors

HTTP Methods

HTTP methods

General information about HTTP methods usage

DELETE

The DELETE method deletes the specified resource.

PUT

The PUT method requests that the enclosed entity be stored under the supplied URI. If the URI refers to an already existing resource, it is modified; if the URI does not point to an existing resource, then the server can create the resource with that URI.

GET

The GET method requests a representation of the specified resource. Requests using GET should only retrieve data and should have no other effect.

POST

The POST method requests that the server accept the entity enclosed in the request as a new subordinate of the web resource identified by the URI. The data POSTed might be, for example, an annotation for existing resources; a message for a bulletin board, newsgroup, mailing list, or comment thread; a block of data that is the result of submitting a web form to a data-handling process; or an item to add to a database.

PATCH

The PATCH method applies partial modifications to a resource.

HTTP Status Redirection

302 Found

Common way of performing URL redirection. An HTTP response with this status code will additionally provide a URL in the location header field. The user agent (e.g. a web browser) is invited by a response with this code to make a second, otherwise identical, request to the new URL specified in the location field.

303 See Other

The response to the request can be found under another URI using a GET method. When received in response to a POST (or PUT/DELETE), the client should presume that the server has received the data and should issue a redirect with a separate GET message.

HTTP Status Server Error

500 Internal Server Error

A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.

503 Service Unavailable

The server is currently unavailable (because it is overloaded or down for maintenance). Generally, this is a temporary state.

HTTP Status Success

201 Created

The request has been fulfilled, resulting in the creation of a new resource.

200 OK

Standard response for successful HTTP requests. The actual response will depend on the request method used. In a GET request, the response will contain an entity corresponding to the requested resource. In a POST request, the response will contain an entity describing or containing the result of the action.

202 Accepted

The request has been accepted for processing, but the processing has not been completed. The request might or might not be eventually acted upon, and may be disallowed when processing occurs.

204 No Content

The server successfully processed the request and is not returning any content.

HTTP Status User Error

400 Bad Request

The server cannot or will not process the request due to an apparent client error (e.g., malformed request syntax, too large size, invalid request message framing, or deceptive request routing).

422 Unprocessable Entity

The request was well-formed but was unable to be followed due to semantic errors.

404 Not Found

The requested resource could not be found but may be available in the future. Subsequent requests by the client are permissible.

403 Forbidden

The request was a valid request, but the server is refusing to respond to it. The user might be logged in but does not have the necessary permissions for the resource.

401 Unauthorized

Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the requested resource.

Hypermedia

Hypermedia (write)

How to use hypermedia to write data

Hypermedia (read)

How to use hypermedia to read data

Hypermedia

How to use hypermedia

Miscellaneous

Query parameters

How to use query parameters

Naming

Naming

How to name things

Case

Which case (lowercase, camelCase, …) to use and when

Resources

Retrieve resource

How to retrieve a resource

Delete resource

How to delete resources

Action resource

How to use action resource (e.g. resources like /cancel or /approve)

Relationships

How to define and use relations between resources

Update resource partially

How to udate partially a resource

URL format

How to design URLs

Resource ID

What is a resource ID and/or how it’s built

Resource

General informations about resources

Dereference Relationships

How to load a resource and its linked resources in one call

Update resource

How to update a resource

Retrieve resource partially

How to retrieve partially a resource

Create resource

How to create resources