Changeset View
Changeset View
Standalone View
Standalone View
externals/JAXL/docs/users/http_examples.rst
- This file was added.
HTTP Examples | |||||
============= | |||||
Writing HTTP Server | |||||
------------------- | |||||
Intialize an ``HTTPServer`` instance | |||||
.. code-block:: ruby | |||||
require_once 'jaxl.php'; | |||||
require_once JAXL_CWD.'/http/http_server.php'; | |||||
$http = new HTTPServer(); | |||||
By default ``HTTPServer`` will listen on port 9699. You can pass a port number as first parameter to change this. | |||||
Define a callback method that will accept all incoming ``HTTPRequest`` objects | |||||
.. code-block:: ruby | |||||
function on_request($request) { | |||||
if($request->method == 'GET') { | |||||
$body = json_encode($request); | |||||
$request->ok($body, array('Content-Type'=>'application:json')); | |||||
} | |||||
else { | |||||
$request->not_found(); | |||||
} | |||||
} | |||||
``on_request`` callback method will receive a ``HTTPRequest`` object instance. | |||||
For this example, we will simply echo back json encoded ``$request`` object for | |||||
every http GET request. | |||||
Start http server: | |||||
.. code-block:: ruby | |||||
$http->start('on_request'); | |||||
We pass ``on_request`` method as first parameter to ``HTTPServer::start/1``. | |||||
If nothing is passed, requests will fail with a default 404 not found error message | |||||
Writing REST API Server | |||||
----------------------- | |||||
Intialize an ``HTTPServer`` instance | |||||
.. code-block:: ruby | |||||
require_once 'jaxl.php'; | |||||
require_once JAXL_CWD.'/http/http_server.php'; | |||||
$http = new HTTPServer(); | |||||
By default ``HTTPServer`` will listen on port 9699. You can pass a port number as first parameter to change this. | |||||
Define our REST resources callback methods: | |||||
.. code-block:: ruby | |||||
function index($request) { | |||||
$request->send_response( | |||||
200, array('Content-Type'=>'text/html'), | |||||
'<html><head/><body><h1>Jaxl Http Server</h1><a href="/upload">upload a file</a></body></html>' | |||||
); | |||||
$request->close(); | |||||
} | |||||
function upload($request) { | |||||
if($request->method == 'GET') { | |||||
$request->send_response( | |||||
200, array('Content-Type'=>'text/html'), | |||||
'<html><head/><body><h1>Jaxl Http Server</h1><form enctype="multipart/form-data" method="POST" action=""><input type="file" name="file"/><input type="submit" value="upload"/></form></body></html>' | |||||
); | |||||
} | |||||
else if($request->method == 'POST') { | |||||
if($request->body === null && $request->expect) { | |||||
$request->recv_body(); | |||||
} | |||||
else { | |||||
// got upload body, save it | |||||
_debug("file upload complete, got ".strlen($request->body)." bytes of data"); | |||||
$request->close(); | |||||
} | |||||
} | |||||
} | |||||
Next we need to register dispatch rules for our callbacks above: | |||||
.. code-block:: ruby | |||||
$index = array('index', '^/$'); | |||||
$upload = array('upload', '^/upload', array('GET', 'POST')); | |||||
$rules = array($index, $upload); | |||||
$http->dispatch($rules); | |||||
Start REST api server: | |||||
.. code-block:: ruby | |||||
$http->start(); | |||||
Make an HTTP request | |||||
-------------------- |