diff options
author | Loïc Hoguin <[email protected]> | 2019-07-18 09:59:28 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2019-07-18 10:08:46 +0200 |
commit | 136d443b5c38bee96f5d995dfea3629ef07564c3 (patch) | |
tree | 1d31540baebc43ca0b2dceeda212c44f5da7e7a8 /docs/en/cowboy/2.0/guide/rest_handlers.asciidoc | |
parent | e031713c0e8bd871248dbbbbdec1ea28609f4431 (diff) | |
download | ninenines.eu-136d443b5c38bee96f5d995dfea3629ef07564c3.tar.gz ninenines.eu-136d443b5c38bee96f5d995dfea3629ef07564c3.tar.bz2 ninenines.eu-136d443b5c38bee96f5d995dfea3629ef07564c3.zip |
Announce Ranch 2.0.0-rc.1
Adds Ranch 2.0 documentation and removes documentation for
very old Cowboy and Ranch, along with Erlang.mk documentation
which is available on its own website.
Diffstat (limited to 'docs/en/cowboy/2.0/guide/rest_handlers.asciidoc')
-rw-r--r-- | docs/en/cowboy/2.0/guide/rest_handlers.asciidoc | 134 |
1 files changed, 0 insertions, 134 deletions
diff --git a/docs/en/cowboy/2.0/guide/rest_handlers.asciidoc b/docs/en/cowboy/2.0/guide/rest_handlers.asciidoc deleted file mode 100644 index c69f02b2..00000000 --- a/docs/en/cowboy/2.0/guide/rest_handlers.asciidoc +++ /dev/null @@ -1,134 +0,0 @@ -[[rest_handlers]] -== REST handlers - -REST is implemented in Cowboy as a sub protocol. The request -is handled as a state machine with many optional callbacks -describing the resource and modifying the machine's behavior. - -The REST handler is the recommended way to handle HTTP requests. - -=== Initialization - -First, the `init/2` callback is called. This callback is common -to all handlers. To use REST for the current request, this function -must return a `cowboy_rest` tuple. - -[source,erlang] ----- -init(Req, State) -> - {cowboy_rest, Req, State}. ----- - -Cowboy will then switch to the REST protocol and start executing -the state machine. - -After reaching the end of the flowchart, the `terminate/3` callback -will be called if it is defined. - -=== Methods - -The REST component has code for handling the following HTTP methods: -HEAD, GET, POST, PATCH, PUT, DELETE and OPTIONS. - -Other methods can be accepted, however they have no specific callback -defined for them at this time. - -=== Callbacks - -All callbacks are optional. Some may become mandatory depending -on what other defined callbacks return. The various flowcharts -in the next chapter should be a useful to determine which callbacks -you need. - -All callbacks take two arguments, the Req object and the State, -and return a three-element tuple of the form `{Value, Req, State}`. - -All callbacks can also return `{stop, Req, State}` to stop execution -of the request. - -The following table summarizes the callbacks and their default values. -If the callback isn't defined, then the default value will be used. -Please look at the flowcharts to find out the result of each return -value. - -In the following table, "skip" means the callback is entirely skipped -if it is undefined, moving directly to the next step. Similarly, -"none" means there is no default value for this callback. - -[cols="<,^",options="header"] -|=== -| Callback name | Default value -| allowed_methods | `[<<"GET">>, <<"HEAD">>, <<"OPTIONS">>]` -| allow_missing_post | `true` -| charsets_provided | skip -| content_types_accepted | none -// @todo Space required for the time being: https://github.com/spf13/hugo/issues/2398 -| content_types_provided | `[{{ <<"text">>, <<"html">>, '*'}, to_html}]` -| delete_completed | `true` -| delete_resource | `false` -| expires | `undefined` -| forbidden | `false` -| generate_etag | `undefined` -| is_authorized | `true` -| is_conflict | `false` -| known_methods | `[<<"GET">>, <<"HEAD">>, <<"POST">>, <<"PUT">>, <<"PATCH">>, <<"DELETE">>, <<"OPTIONS">>]` -| languages_provided | skip -| last_modified | `undefined` -| malformed_request | `false` -| moved_permanently | `false` -| moved_temporarily | `false` -| multiple_choices | `false` -| options | `ok` -| previously_existed | `false` -| resource_exists | `true` -| service_available | `true` -| uri_too_long | `false` -| valid_content_headers | `true` -| valid_entity_length | `true` -| variances | `[]` -|=== - -As you can see, Cowboy tries to move on with the request whenever -possible by using well thought out default values. - -In addition to these, there can be any number of user-defined -callbacks that are specified through `content_types_accepted/2` -and `content_types_provided/2`. They can take any name, however -it is recommended to use a separate prefix for the callbacks of -each function. For example, `from_html` and `to_html` indicate -in the first case that we're accepting a resource given as HTML, -and in the second case that we send one as HTML. - -=== Meta data - -Cowboy will set informative values to the Req object at various -points of the execution. You can retrieve them by matching the -Req object directly. The values are defined in the following table: - -[cols="<,<",options="header"] -|=== -| Key | Details -| media_type | The content-type negotiated for the response entity. -| language | The language negotiated for the response entity. -| charset | The charset negotiated for the response entity. -|=== - -They can be used to send a proper body with the response to a -request that used a method other than HEAD or GET. - -=== Response headers - -Cowboy will set response headers automatically over the execution -of the REST code. They are listed in the following table. - -[cols="<,<",options="header"] -|=== -| Header name | Details -| content-language | Language used in the response body -| content-type | Media type and charset of the response body -| etag | Etag of the resource -| expires | Expiration date of the resource -| last-modified | Last modification date for the resource -| location | Relative or absolute URI to the requested resource -| vary | List of headers that may change the representation of the resource -|=== |