Browse Source

Update ROADMAP

Loïc Hoguin 10 years ago
parent
commit
6fd2cadb1d
1 changed files with 52 additions and 6 deletions
  1. 52 6
      ROADMAP.md

+ 52 - 6
ROADMAP.md

@@ -20,6 +20,51 @@ A number of backward incompatible changes are planned. These
 changes are individually small, but together should result
 changes are individually small, but together should result
 in a large improvement in usability.
 in a large improvement in usability.
 
 
+### New cowboy_req function
+
+A convenience function will be added to more easily process
+HTML forms that were sent using POST. These forms have two
+main ways of being submitted: as a form urlencoded format,
+or as multipart. The latter case may also be used to submit
+files, therefore we also need a way to handle this. We also
+need to take into account that we are reading from the socket
+and can't take as much a shortcut as with `match_qs/2`.
+
+The function will work similarly to other body reading functions,
+in that it may require more than one call to obtain everything.
+In this case there would be two return values: the `ok` return
+with the map filled with key/value pairs, ending the body reading;
+and the `file` return that informs the caller that a file has been
+provided and the caller must handle it. If the caller calls the
+function again without doing anything, the part is just skipped,
+like what `part/1` is doing. If a file is the last input from
+the form then a subsequent call will return an `ok` return with
+an empty map.
+
+The interface would look as follow:
+
+```
+match_body(Fields, Req) -> match_body(Fields, Req, [])
+match_body(Fields, Req, Opts)
+	-> {ok, Map, Req}
+	| {file, FieldName, Filename, CType, CTransferEncoding, Map, Req}
+	when Req::req()
+```
+
+It would be up to the caller to decide what to do with the
+maps returned. Fields are in order so the map returned may
+be empty if the form starts with a file, or may only
+contain the values before the file input if this one is
+in the middle of the form. It is of course possible to
+merge all maps returned into one though that should not
+be needed very often.
+
+It is also possible to switch from this function to only
+multipart functions if the function returns a `file` tuple,
+as this function is a higher level interface that simply
+calls the multipart functions when the request body is
+in multipart format.
+
 ### Hooks
 ### Hooks
 
 
 The interface of the `onresponse` hook will change. There has
 The interface of the `onresponse` hook will change. There has
@@ -50,6 +95,13 @@ interface that may be used in middlewares or hooks (but
 nowhere else). This includes the Req access and update
 nowhere else). This includes the Req access and update
 functions and the new response function described above.
 functions and the new response function described above.
 
 
+### Loop
+
+We probably want to send something other than 500 when the
+max data read value has been reached. This happens when the
+client is misbehaving and is not a server error, but rather
+a safeguard.
+
 ### REST
 ### REST
 
 
 The documentation for all REST callbacks will be updated
 The documentation for all REST callbacks will be updated
@@ -58,9 +110,3 @@ allows us to build introspection tools on top of a working
 REST API.
 REST API.
 
 
 Range support will be added.
 Range support will be added.
-
-Under consideration
--------------------
-
- *  Convenience API for extracting query string and body
-    information, similar to PHP's $_GET, $_POST and $_FILES