[asterisk-commits] dlee: branch dlee/stasis-http r382602 - /team/dlee/stasis-http/res/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Mar 7 10:34:14 CST 2013


Author: dlee
Date: Thu Mar  7 10:34:11 2013
New Revision: 382602

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=382602
Log:
File docs for res_stasis_http

Modified:
    team/dlee/stasis-http/res/res_stasis_http.c

Modified: team/dlee/stasis-http/res/res_stasis_http.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-http/res/res_stasis_http.c?view=diff&rev=382602&r1=382601&r2=382602
==============================================================================
--- team/dlee/stasis-http/res/res_stasis_http.c (original)
+++ team/dlee/stasis-http/res/res_stasis_http.c Thu Mar  7 10:34:11 2013
@@ -19,8 +19,50 @@
 /*! \file
  *
  * \brief HTTP binding for the Stasis API
- *
  * \author David M. Lee, II <dlee at digium.com>
+ *
+ * The API itself is documented using <a
+ * href="https://developers.helloreverb.com/swagger/">Swagger</a>, a lightweight
+ * mechanism for documenting RESTful API's using JSON. This allows us to use <a
+ * href="https://github.com/wordnik/swagger-ui">swagger-ui</a> to provide
+ * executable documentation for the API, generate client bindings in different
+ * <a href="https://github.com/asterisk/asterisk_rest_libraries">languages</a>,
+ * and generate a lot of the boilerplate code for implementing the RESTful
+ * bindings. The API docs live in the \c rest-api/ directory.
+ *
+ * The RESTful bindings are generated from the Swagger API docs using a set of
+ * <a href="http://nedbatchelder.com/code/cog/">Cog.py</a> templates. Cog.py is
+ * extemely lightweight (maybe too lightweight), and can be installed easily
+ * using \c pip. Template scripts live in the \c cog/ directory, and the
+ * generated code lives in the \c res/stasis-http/ directory.
+ *
+ * The structure of the generated code is:
+
+ *  - A tree of \ref stasis_rest_handlers which are used for request routing.
+ *  - Prototypes for request handlers, and structures for passing arguments in
+ *    the request handler.
+ *  - A set of \ref stasis_rest_callback functions, which glue the two
+ *    together. They parse out path variables and request parameters to populate
+ *    a specific \c *_args which is passed to the specific request handler.
+ *
+ * The use of the generated \c *_args allows for greater type safety and reduced
+ * boilerplate in the request handlers themselves.
+ *
+ * The basic flow of an HTTP request is:
+ *
+ *  - stasis_http_callback()
+ *    1. Initial request validation
+ *    2. Routes as either a doc request (stasis_http_get_docs) or API
+ *       request (stasis_http_invoke)
+ *       - stasis_http_invoke()
+ *         1. Further request validation
+ *         2. Routes the request through the tree of generated
+ *            \ref stasis_rest_handlers.
+ *         3. Dispatch to the generated callback
+ *            - \c stasis_http_*_cb
+ *              1. Populate \c *_args struct with path and get params
+ *              2. Invoke the request handler
+ *    3. Validates and sends response
  */
 
 /*** MODULEINFO




More information about the asterisk-commits mailing list