mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 12:20:24 +00:00
Roadmap for Cowboy 2.0
This commit is contained in:
parent
4eb6c7928a
commit
e40c2c33c5
1 changed files with 90 additions and 12 deletions
102
ROADMAP.md
102
ROADMAP.md
|
@ -15,23 +15,101 @@ are expected to be bug fixes and documentation improvements.
|
|||
2.0 (R17 and R18)
|
||||
-----------------
|
||||
|
||||
* HTTP/2.0
|
||||
The main features that will be added to Cowboy 2.0 are support
|
||||
for HTTP/2.0 and Websocket permessage deflate compression.
|
||||
|
||||
* Websocket permessage deflate compression
|
||||
A number of backward incompatible changes are planned. These
|
||||
changes are individually small, but together should result
|
||||
in a large improvement in usability.
|
||||
|
||||
* Better cowboy_req usability
|
||||
### cowboy_req
|
||||
|
||||
The number one usability concern with Cowboy today is
|
||||
the need to keep the Req object. Most functions in
|
||||
cowboy_req don't actually modify it and probably never
|
||||
will. This change will make sure that only the required
|
||||
function return a new Req.
|
||||
The interface of `cowboy_req` will be largely changed. The
|
||||
number one complaint about Cowboy today is that you have
|
||||
to keep track of the Req whenever you do anything. The new
|
||||
interface will minimize that.
|
||||
|
||||
At the same time, some of the functions that cache their
|
||||
results will stop to do so. This will save memory and
|
||||
allow us to not modify the Req.
|
||||
All functions will return a single term, excluding the body
|
||||
reading functions `body/{1,2}`, `body_qs/{1,2}`, `part/{1,2}`,
|
||||
`part_body/{1,2}`.
|
||||
|
||||
* Start experimenting with maps.
|
||||
%% @todo yeah qs and cookies too probably???
|
||||
|
||||
Of the functions returning a single term, some of them will
|
||||
return a Req object. This includes the functions that already
|
||||
return Req: `compact/1`, `delete_resp_header/2`, `set_meta/3`,
|
||||
`set_resp_body/2`, `set_resp_body_fun/{2,3}`, `set_resp_cookie/4`,
|
||||
`set_resp_header/3`, and adds the `chunked_reply/{2,3}` and
|
||||
`reply/{2,3,4}` functions to the list.
|
||||
|
||||
Of note is that this will allow chaining all the response
|
||||
functions if that's what you fancy.
|
||||
|
||||
The `parse_header/{2,3}` function will now only return the
|
||||
parsed header value, and crash on error. It will also not
|
||||
cache the parsed value anymore, except for headers that Cowboy
|
||||
requires, like the connection header.
|
||||
|
||||
### init/terminate unification
|
||||
|
||||
The first argument of the `init/3` is too rarely used. It
|
||||
will be removed.
|
||||
|
||||
The return value of the `init/2` function will become
|
||||
`{http, Req, State} | {loop, Req, State} | {Module, Req, State}`
|
||||
with `Module` being `cowboy_rest`, `cowboy_websocket` or a
|
||||
user provided module.
|
||||
|
||||
The `rest_init` and `websocket_init` callbacks will be removed
|
||||
as they become unnecessary with the new `init/2` interface.
|
||||
|
||||
Similarly, the `rest_terminate` and `websocket_terminate`
|
||||
callbacks will be removed in favor of a unified `terminate/3`.
|
||||
|
||||
The `terminate/3` callback will become optional.
|
||||
|
||||
### Hooks
|
||||
|
||||
The `onrequest` hook will be removed. It can easily be replaced
|
||||
by a middleware.
|
||||
|
||||
The interface of the `onresponse` hook will change. There has
|
||||
been a number of issues and added complexity with the current
|
||||
interface that warrant fixing. The main problem is that the
|
||||
hook may be used to change the reply, by calling the reply
|
||||
function again, forcing us to be careful not to reprocess
|
||||
everything again.
|
||||
|
||||
To fix that, we will cut the reply mechanism in two steps,
|
||||
one that is basically some preprocessing of the response
|
||||
header to follow the protocol requirements, and then the
|
||||
actual response. The `onresponse` hook will fit in the
|
||||
middle, being called from the first step and calling the
|
||||
second step itself.
|
||||
|
||||
If a body streaming function is provided, the hook will
|
||||
also receive it (unlike today). It will not be able to
|
||||
inspect its contents however.
|
||||
|
||||
This should greatly simplify the code and allow users to
|
||||
do any operation they wish.
|
||||
|
||||
### Low-level interface documented
|
||||
|
||||
A special chapter of the manual will document a low-level
|
||||
interface that may be used in middlewares or hooks (but
|
||||
nowhere else). This includes the Req access and update
|
||||
functions and the new response function described above.
|
||||
|
||||
### REST
|
||||
|
||||
The `known_content_type` callback has no purpose, so it
|
||||
is going to be removed.
|
||||
|
||||
The documentation for all REST callbacks will be updated
|
||||
to describe whether they can have side effects. This will
|
||||
allows us to build introspection tools on top of a working
|
||||
REST API.
|
||||
|
||||
Under consideration
|
||||
-------------------
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue