UNPKG

processmaker-builder

Version:

The gulp task runner for ProcessMaker building

491 lines (388 loc) 27 kB
<!DOCTYPE html> <html> <head> <title>Luracast Restler 3 Live Examples:- CRUD</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="../resources/bootstrap.min.css" /> <link rel="stylesheet" type="text/css" href="../resources/highlight.css" /> <link rel="stylesheet" type="text/css" href="../resources/style.css" /> <link rel="stylesheet" type="text/css" href="../resources/facebox.css" /> <link rel="stylesheet" type="text/css" href="../resources/hacks.css" /> <script type="text/javascript" src="../resources/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="../resources/facebox.js"></script> <script type="text/javascript" src="../resources/bootstrap.min.js"></script> <script type="text/javascript" src="../resources/highlight.pack.js"></script> <script type="text/javascript"> $(document).ready( function() { $('dd pre code').each(function(i, e) { text = $(e).text(); $(e).addClass(text.charAt(0) == '<' ? 'xml' : 'json') //hljs.highlightBlock(e); }); $('pre code').each(function(i, e) { if($(e).attr('class')) hljs.highlightBlock(e); }); $('abbr').parents().not('a').children('abbr').click( function() { $('#codeviewer').load( '../resources/getsource.php?file=' + $(this).attr("title"), function() { /* $("pre#php").snippet("php", { style : "acid", showNum : false }); */ jQuery.facebox({ div : '#codeviewer' }); hljs.highlightBlock($("pre#php")[1]); }); }); var curURL = window.location.pathname.split('/examples/')[1]; if (curURL == '') curURL = 'index.html'; $("a").each(function() { if ($(this).attr("href") && $(this).attr("href").indexOf(curURL) > -1) { $(this).addClass("active"); } }); $('#right tag').popover({ html : true, placement : 'left', trigger : 'manual', title : 'Tagged Examples', content : '...' }).click(function(e) { $('#right tag').popover('hide'); $(this).popover('show'); e.preventDefault(); e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true; }); $(document).click(function(e) { $('#right tag').popover('hide'); }); }) </script> <!--[if lte IE 8]> <script type="text/javascript"> (function(){if(!/*@cc_on!@*/0)return;var e = "abbr,article,aside,audio,bb,canvas,datagrid,datalist,details,dialog,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video,tag".split(',');for(var i=0;i<e.length;i++){document.createElement(e[i])}})() </script> <![endif]--> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-23777019-2']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> </head> <body> <nav class="floating-menu"> <ul> <li><a title="Restler Home" target="_blank" href="http://luracast.com/products/restler/"><img src="../resources/home.png" width="16" height="16"/> Home</a></li> <li><a title="Getting Started with Restler" href="../.."><img src="../resources/quickstart.png" width="16" height="16"/> Start</a></li> <!--<li><a title="Using Restler" href="#">Guide</a></li><li><a title="Restler API Reference" href="#">API</a></li>--> <li><a class="active" href="../index.html"><img src="../resources/examples.png" width="16" height="16"/> Examples</a></li> <li><a title="Share your knowledge by answering user questions in Stack Overflow." target="_blank" href="http://bit.ly/Restler-QA"><img src="../resources/stackoverflow.png" width="16" height="16"/> Support</a></li> <li><a title="Contribute and Fork Restler on GitHub" target="_blank" href="http://bit.ly/LuracastRestler"><img src="../resources/github.png" width="16" height="16"/> Source</a></li> <li><a title="Get updated on Twitter" target="_blank" href="http://twitter.com/Luracast"><img src="../resources/twitter.png" width="16" height="16"/> Update</a></li> <li><a title="Keep in touch on Facebook" target="_blank" href="https://www.facebook.com/Luracast"><img src="../resources/facebook.png" width="16" height="16"/> Connect</a></li> </ul> </nav> <div id="codeviewer" style="display: none;"></div> <nav id="left"> <img src="../resources/Restler3.gif" width="126" height="126" title="Luracast Restler 3" /> <h3> <a href="../index.html">Examples</a> </h3> <ul> <li><a href="../_001_helloworld/readme.html" title="Let's say hello!">Hello World</a></li> <li><a href="../_002_minimal/readme.html" title="Less is more">Minimal</a></li> <li><a href="../_003_multiformat/readme.html" title="Serving what the client wants">Multi-format</a></li> <li><a href="../_004_error_response/readme.html" title="Making use of HTTP status codes">Error Response</a></li> <li><a href="../_005_protected_api/readme.html" title="Creating restricted zone">Protected API</a></li> <li><a href="../_006_routing/readme.html" title="Ways to map api methods to url">Routing</a></li> <li><a href="../_007_crud/readme.html" title="using POST, GET, PUT and DELETE">CRUD</a></li> <li><a href="../_008_documentation/readme.html" title="Commenting can be more rewarding">Documentation</a></li> <li><a href="../_009_rate_limiting/readme.html" title="Abuse no more">Rate Limiting</a></li> <li><a href="../_010_access_control/readme.html" title="Who can do what">Access Control</a></li> <li><a href="../_011_versioning/readme.html" title="using the URL">Versioning</a></li> <li><a href="../_012_vendor_mime/readme.html" title="custom media type for versioning">Vendor MIME</a></li> <li><a href="../_013_html/readme.html" title="rendering custom views">Html Format</a></li> <li><a href="../_014_oauth2_client/readme.html" title="to consume protected API">OAuth2 Client</a></li> <li><a href="../_015_oauth2_server/readme.html" title="offering protected API">OAuth2 Server</a></li> <li><a href="../_016_forms/readme.html" title="to capture user input">Forms</a></li> </ul> </nav> <nav id="right"> <h3><a href="../index.html">Examples by Tag</a></h3> <ul class="tags"> <li><tag title="Access-control Example(s)" data-content="&lt;a href=&quot;../_010_access_control/readme.html&quot;&gt;Access Control&lt;/a&gt; &lt;a href=&quot;../_014_oauth2_client/readme.html&quot;&gt;OAuth2 Client&lt;/a&gt; &lt;a href=&quot;../_015_oauth2_server/readme.html&quot;&gt;OAuth2 Server&lt;/a&gt;">access-control</tag><badge>3</badge></li> <li><tag title="Acl Example(s)" data-content="&lt;a href=&quot;../_010_access_control/readme.html&quot;&gt;Access Control&lt;/a&gt; &lt;a href=&quot;../_014_oauth2_client/readme.html&quot;&gt;OAuth2 Client&lt;/a&gt; &lt;a href=&quot;../_015_oauth2_server/readme.html&quot;&gt;OAuth2 Server&lt;/a&gt;">acl</tag><badge>3</badge></li> <li><tag title="Authentication Example(s)" data-content="&lt;a href=&quot;../_005_protected_api/readme.html&quot;&gt;Protected API&lt;/a&gt; &lt;a href=&quot;../_010_access_control/readme.html&quot;&gt;Access Control&lt;/a&gt; &lt;a href=&quot;../_014_oauth2_client/readme.html&quot;&gt;OAuth2 Client&lt;/a&gt; &lt;a href=&quot;../_015_oauth2_server/readme.html&quot;&gt;OAuth2 Server&lt;/a&gt;">authentication</tag><badge>4</badge></li> <li><tag title="Authorization Example(s)" data-content="&lt;a href=&quot;../_005_protected_api/readme.html&quot;&gt;Protected API&lt;/a&gt; &lt;a href=&quot;../_010_access_control/readme.html&quot;&gt;Access Control&lt;/a&gt; &lt;a href=&quot;../_014_oauth2_client/readme.html&quot;&gt;OAuth2 Client&lt;/a&gt; &lt;a href=&quot;../_015_oauth2_server/readme.html&quot;&gt;OAuth2 Server&lt;/a&gt;">authorization</tag><badge>4</badge></li> <li><tag title="Basic Example(s)" data-content="&lt;a href=&quot;../_001_helloworld/readme.html&quot;&gt;Hello World Example&lt;/a&gt; &lt;a href=&quot;../_002_minimal/readme.html&quot;&gt;Minimal Example&lt;/a&gt;">basic</tag><badge>2</badge></li> <li><tag title="Blade Example(s)" data-content="&lt;a href=&quot;../_016_forms/readme.html&quot;&gt;Forms Example&lt;/a&gt;">blade</tag></li> <li><tag title="Bootstrap Example(s)" data-content="&lt;a href=&quot;../_016_forms/readme.html&quot;&gt;Forms Example&lt;/a&gt;">bootstrap</tag></li> <li><tag title="Create Example(s)" data-content="&lt;a href=&quot;../_007_crud/readme.html&quot;&gt;CRUD&lt;/a&gt; &lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt; &lt;a href=&quot;../_009_rate_limiting/readme.html&quot;&gt;Rate Limiting&lt;/a&gt;">create</tag><badge>3</badge></li> <li><tag title="Custom Example(s)" data-content="&lt;a href=&quot;../_012_vendor_mime/readme.html&quot;&gt;Vendor MIME&lt;/a&gt;">custom</tag></li> <li><tag title="Debug Example(s)" data-content="&lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt;">debug</tag></li> <li><tag title="Delete Example(s)" data-content="&lt;a href=&quot;../_006_routing/readme.html&quot;&gt;Routing&lt;/a&gt; &lt;a href=&quot;../_007_crud/readme.html&quot;&gt;CRUD&lt;/a&gt; &lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt; &lt;a href=&quot;../_009_rate_limiting/readme.html&quot;&gt;Rate Limiting&lt;/a&gt;">delete</tag><badge>4</badge></li> <li><tag title="Doc Example(s)" data-content="&lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt;">doc</tag></li> <li><tag title="Emmet Example(s)" data-content="&lt;a href=&quot;../_016_forms/readme.html&quot;&gt;Forms Example&lt;/a&gt;">emmet</tag></li> <li><tag title="Exception Example(s)" data-content="&lt;a href=&quot;../_004_error_response/readme.html&quot;&gt;Error Response&lt;/a&gt;">exception</tag></li> <li><tag title="Filter Example(s)" data-content="&lt;a href=&quot;../_009_rate_limiting/readme.html&quot;&gt;Rate Limiting&lt;/a&gt;">filter</tag></li> <li><tag title="Form Example(s)" data-content="&lt;a href=&quot;../_016_forms/readme.html&quot;&gt;Forms Example&lt;/a&gt;">form</tag></li> <li><tag title="Foundation Example(s)" data-content="&lt;a href=&quot;../_016_forms/readme.html&quot;&gt;Forms Example&lt;/a&gt;">foundation</tag></li> <li><tag title="Get Example(s)" data-content="&lt;a href=&quot;../_006_routing/readme.html&quot;&gt;Routing&lt;/a&gt; &lt;a href=&quot;../_007_crud/readme.html&quot;&gt;CRUD&lt;/a&gt; &lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt; &lt;a href=&quot;../_009_rate_limiting/readme.html&quot;&gt;Rate Limiting&lt;/a&gt;">get</tag><badge>4</badge></li> <li><tag title="Handlebar Example(s)" data-content="&lt;a href=&quot;../_013_html/readme.html&quot;&gt;Html Format&lt;/a&gt;">handlebar</tag></li> <li><tag title="Html Example(s)" data-content="&lt;a href=&quot;../_013_html/readme.html&quot;&gt;Html Format&lt;/a&gt; &lt;a href=&quot;../_016_forms/readme.html&quot;&gt;Forms Example&lt;/a&gt;">html</tag><badge>2</badge></li> <li><tag title="Http Status Example(s)" data-content="&lt;a href=&quot;../_002_minimal/readme.html&quot;&gt;Minimal Example&lt;/a&gt; &lt;a href=&quot;../_004_error_response/readme.html&quot;&gt;Error Response&lt;/a&gt;">http status</tag><badge>2</badge></li> <li><tag title="Json Example(s)" data-content="&lt;a href=&quot;../_003_multiformat/readme.html&quot;&gt;Multi-format&lt;/a&gt;">json</tag></li> <li><tag title="Mediatype Example(s)" data-content="&lt;a href=&quot;../_012_vendor_mime/readme.html&quot;&gt;Vendor MIME&lt;/a&gt;">mediatype</tag></li> <li><tag title="Mime Example(s)" data-content="&lt;a href=&quot;../_012_vendor_mime/readme.html&quot;&gt;Vendor MIME&lt;/a&gt;">mime</tag></li> <li><tag title="Mustache Example(s)" data-content="&lt;a href=&quot;../_013_html/readme.html&quot;&gt;Html Format&lt;/a&gt;">mustache</tag></li> <li><tag title="Patch Example(s)" data-content="&lt;a href=&quot;../_006_routing/readme.html&quot;&gt;Routing&lt;/a&gt;">patch</tag></li> <li><tag title="Php Example(s)" data-content="&lt;a href=&quot;../_013_html/readme.html&quot;&gt;Html Format&lt;/a&gt;">php</tag></li> <li><tag title="Post Example(s)" data-content="&lt;a href=&quot;../_006_routing/readme.html&quot;&gt;Routing&lt;/a&gt; &lt;a href=&quot;../_007_crud/readme.html&quot;&gt;CRUD&lt;/a&gt; &lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt; &lt;a href=&quot;../_009_rate_limiting/readme.html&quot;&gt;Rate Limiting&lt;/a&gt;">post</tag><badge>4</badge></li> <li><tag title="Production Example(s)" data-content="&lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt;">production</tag></li> <li><tag title="Put Example(s)" data-content="&lt;a href=&quot;../_006_routing/readme.html&quot;&gt;Routing&lt;/a&gt; &lt;a href=&quot;../_007_crud/readme.html&quot;&gt;CRUD&lt;/a&gt; &lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt; &lt;a href=&quot;../_009_rate_limiting/readme.html&quot;&gt;Rate Limiting&lt;/a&gt;">put</tag><badge>4</badge></li> <li><tag title="Rate-limiting Example(s)" data-content="&lt;a href=&quot;../_009_rate_limiting/readme.html&quot;&gt;Rate Limiting&lt;/a&gt;">rate-limiting</tag></li> <li><tag title="Read Example(s)" data-content="&lt;a href=&quot;../_007_crud/readme.html&quot;&gt;CRUD&lt;/a&gt; &lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt; &lt;a href=&quot;../_009_rate_limiting/readme.html&quot;&gt;Rate Limiting&lt;/a&gt;">read</tag><badge>3</badge></li> <li><tag title="Retrieve Example(s)" data-content="&lt;a href=&quot;../_007_crud/readme.html&quot;&gt;CRUD&lt;/a&gt; &lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt; &lt;a href=&quot;../_009_rate_limiting/readme.html&quot;&gt;Rate Limiting&lt;/a&gt;">retrieve</tag><badge>3</badge></li> <li><tag title="Routing Example(s)" data-content="&lt;a href=&quot;../_006_routing/readme.html&quot;&gt;Routing&lt;/a&gt; &lt;a href=&quot;../_007_crud/readme.html&quot;&gt;CRUD&lt;/a&gt; &lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt;">routing</tag><badge>3</badge></li> <li><tag title="Secure Example(s)" data-content="&lt;a href=&quot;../_010_access_control/readme.html&quot;&gt;Access Control&lt;/a&gt; &lt;a href=&quot;../_014_oauth2_client/readme.html&quot;&gt;OAuth2 Client&lt;/a&gt; &lt;a href=&quot;../_015_oauth2_server/readme.html&quot;&gt;OAuth2 Server&lt;/a&gt;">secure</tag><badge>3</badge></li> <li><tag title="Template Example(s)" data-content="&lt;a href=&quot;../_013_html/readme.html&quot;&gt;Html Format&lt;/a&gt;">template</tag></li> <li><tag title="Throttle Example(s)" data-content="&lt;a href=&quot;../_009_rate_limiting/readme.html&quot;&gt;Rate Limiting&lt;/a&gt;">throttle</tag></li> <li><tag title="Twig Example(s)" data-content="&lt;a href=&quot;../_013_html/readme.html&quot;&gt;Html Format&lt;/a&gt;">twig</tag></li> <li><tag title="Update Example(s)" data-content="&lt;a href=&quot;../_007_crud/readme.html&quot;&gt;CRUD&lt;/a&gt; &lt;a href=&quot;../_008_documentation/readme.html&quot;&gt;Documentation&lt;/a&gt; &lt;a href=&quot;../_009_rate_limiting/readme.html&quot;&gt;Rate Limiting&lt;/a&gt;">update</tag><badge>3</badge></li> <li><tag title="Validation Example(s)" data-content="&lt;a href=&quot;../_002_minimal/readme.html&quot;&gt;Minimal Example&lt;/a&gt; &lt;a href=&quot;../_004_error_response/readme.html&quot;&gt;Error Response&lt;/a&gt; &lt;a href=&quot;../_016_forms/readme.html&quot;&gt;Forms Example&lt;/a&gt;">validation</tag><badge>3</badge></li> <li><tag title="Vendor Example(s)" data-content="&lt;a href=&quot;../_012_vendor_mime/readme.html&quot;&gt;Vendor MIME&lt;/a&gt;">vendor</tag></li> <li><tag title="Versioning Example(s)" data-content="&lt;a href=&quot;../_011_versioning/readme.html&quot;&gt;Versioning&lt;/a&gt; &lt;a href=&quot;../_012_vendor_mime/readme.html&quot;&gt;Vendor MIME&lt;/a&gt;">versioning</tag><badge>2</badge></li> <li><tag title="View Example(s)" data-content="&lt;a href=&quot;../_013_html/readme.html&quot;&gt;Html Format&lt;/a&gt;">view</tag></li> <li><tag title="Xml Example(s)" data-content="&lt;a href=&quot;../_003_multiformat/readme.html&quot;&gt;Multi-format&lt;/a&gt;">xml</tag></li> </ul> </nav> <article id="page"> <div class="right"><small>7</small></div> <p><a id="crud" class="anchor"></a><h2>CRUD <requires>PHP >= 5.3</requires></h2></p> <p><tag>create</tag> <tag>retrieve</tag> <tag>read</tag> <tag>update</tag> <tag>delete</tag> <tag>post</tag> <tag>get</tag> <tag>put</tag> <tag>routing</tag></p> <p>Create, Retrieve, Update and Delete using HTTP methods POST, GET, PUT and DELETE respectively.</p> <p>Restler uses <em>get, put, post, and delete</em> as prefix to map PHP methods to respective HTTP methods. When they are the only method names they map at the class level similar to <em>index</em></p> <blockquote> <p><strong>Note:-</strong></p> <ol> <li>Read the <a href="../_006_routing/readme.html" target="_blank">Routes</a> example for better understanding.</li> <li>When we want the entire data that is sent to the API, we need to use <code>$request_data</code> as the name of the parameter any other name will only get partial data under the specified key</li> <li>This example favours simplicity over best practices. <a href="../_008_documentation/readme.html" target="_blank">Documentation</a> and <a href="../_009_rate_limiting/readme.html" target="_blank">Rate Limiting</a> examples continue improving from where we left off here. It is highly recommended to check them out.</li> </ol> </blockquote> <p>For simplicity and making it work out of the box this example is using a session based fake database, thus depending on a client that supports PHP Session Cookies. You may use <a href="https://chrome.google.com/webstore/detail/faceofpmfclkengnkgkgjkcibdbhemoc#" target="_blank">REST Console</a> an extension for Chrome or <a href="https://addons.mozilla.org/en-US/firefox/addon/restclient/" target="_blank">RESTClient</a> a firefox extension.</p> <p>Alternatively you can use <a href="http://en.wikipedia.org/wiki/CURL" target="_blank">cURL</a> on the command line.</p> <pre><code class="bash">curl -X POST http://restler3.luracast.com/examples/_007_crud/index.php/authors -H "Content-Type: application/json" -d '{"name": "Another", "email": "another@email.com"}' { "name": "Another", "email": "another@email.com", "id": 5 } </code></pre> <p>But since the session wont be working, next request wont reflect the change done by previous request, anyway you get the idea. You may use any of the following files instead of <abbr title="_007_crud/DB/Session.php">Session.php</abbr> to get full functionality.</p> <blockquote> <ul> <li><abbr title="_007_crud/DB/SerializedFile.php">SerializedFile.php</abbr> (helper)</li> <li><abbr title="_007_crud/DB/PDO/Sqlite.php">Sqlite.php</abbr> (helper)</li> <li><abbr title="_007_crud/DB/PDO/MySQL.php">MySQL.php</abbr> (helper)</li> </ul> </blockquote> <p>by un-commenting the respective line in <abbr title="_007_crud/Authors.php">Authors.php</abbr> and commenting others.</p> <blockquote> <p>This API Server is made using the following php files/folders</p> <ul> <li><abbr title="_007_crud/index.php">index.php</abbr> (gateway)</li> <li><abbr title="_007_crud/Authors.php">Authors.php</abbr> (api)</li> <li><abbr title="_007_crud/DB/Session.php">Session.php</abbr> (helper)</li> <li><abbr title="../../vendor/restler.php">restler.php</abbr> (framework)</li> <li><abbr title="../../vendor/Luracast/Restler/Format/JsonFormat.php">JsonFormat.php</abbr> (format)</li> </ul> </blockquote> <p>This API Server exposes the following URIs</p> <pre><code>GET authors ⇠ Authors::index() POST authors ⇠ Authors::post() DELETE authors/{id} ⇠ Authors::delete() GET authors/{id} ⇠ Authors::get() PUT authors/{id} ⇠ Authors::put() </code></pre> <p>Try the following links in your browser</p> <dl> <dt>GET <a href="index.php/authors" target="_blank">authors</a></dt> <dd> <p></p> <pre><code>[ { "id": 1, "name": "Jac Wright", "email": "jacwright@gmail.com" }, { "id": 2, "name": "Arul Kumaran", "email": "arul@luracast.com" } ] </code></pre> </dd> <dt>GET <a href="index.php/authors/2" target="_blank">authors/2</a></dt> <dd><pre><code>{ "id": 2, "name": "Arul Kumaran", "email": "arul@luracast.com" } </code></pre></dd> <p><a id="creating-new-author" class="anchor"></a><h3>Creating new Author</h3></p> <p>Typical post request to create a new author will be any of the following</p> <p><strong>Using query parameters</strong></p> <pre><code class="http">POST /examples/_007_crud/index.php/authors?name=Another&amp;email=another@email.com HTTP/1.1 Host: restler3.dev Content-Length: 0 Accept-Language: en X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept: /* Accept-Encoding: gzip,deflate,sdch Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: PHPSESSID=dcdfec433e86c1a6730f75303187071f </code></pre> <p><strong>Using post vars</strong></p> <pre><code class="http">POST /examples/_007_crud/index.php/authors HTTP/1.1 Host: restler3.dev Content-Length: 36 Accept-Language: en X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept: /* Accept-Encoding: gzip,deflate,sdch Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: PHPSESSID=dcdfec433e86c1a6730f75303187071f name=Another&amp;email=another@email.com </code></pre> <p><strong>Using JSON data</strong></p> <pre><code class="http">POST /examples/_007_crud/index.php/authors HTTP/1.1 Host: restler3.dev Content-Length: 46 Origin: chrome-extension://faceofpmfclkengnkgkgjkcibdbhemoc Accept-Language: en X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1 Content-Type: application/json; charset=UTF-8 Accept: /* Accept-Encoding: gzip,deflate,sdch Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: PHPSESSID=dcdfec433e86c1a6730f75303187071f {"name":"Another","email":"another@email.com"} </code></pre> <p>and the response for all the above could be</p> <pre><code class="http">HTTP/1.1 200 OK Date: Tue, 25 Sep 2012 10:05:06 GMT Server: Apache/2.2.19 (Unix) mod_ssl/2.2.19 OpenSSL/0.9.8r DAV/2 PHP/5.3.6 with Suhosin-Patch X-Powered-By: Luracast Restler v3.0.0 Expires: 0 Cache-Control: no-cache, must-revalidate Pragma: no-cache Content-Length: 66 Content-Type: application/json { "name": "Another", "email": "another@email.com", "id": 7 } </code></pre> <p>We expect the following behaviour from this example.</p> <pre><code class="gherkin"><br />@example7 @crud Feature: Testing CRUD Example Scenario: Creating new Author by POSTing vars Given that I want to make a new "Author" And his "name" is "Chris" And his "email" is "chris@world.com" When I request "/examples/_007_crud/authors" Then the response status code should be 200 And the response should be JSON And the response has a "id" property Scenario: Creating new Author with JSON Given that I want to make a new "Author" And his "name" is "Chris" And his "email" is "chris@world.com" And the request is sent as JSON When I request "/examples/_007_crud/authors" Then the response status code should be 200 And the response should be JSON And the response has a "id" property Scenario: Updating Author with JSON Given that I want to update "Author" And his "name" is "Jac" And his "email" is "jac@wright.com" And his "id" is 1 And the request is sent as JSON When I request "/examples/_007_crud/authors/{id}" Then the response status code should be 200 And the response should be JSON And the response has a "id" property Scenario: Given url is valid for other http method(s) Given that I want to update "Author" And his "name" is "Jac" And his "email" is "jac@wright.com" And his "id" is 1 And the request is sent as JSON When I request "/examples/_007_crud/authors" Then the response status code should be 405 Scenario: Deleting Author Given that I want to delete an "Author" And his "id" is 1 When I request "/examples/_007_crud/authors/{id}" Then the response status code should be 200 And the response should be JSON And the response has an "id" property </code></pre> <p>It can be tested by running the following command on terminal/command line from the project root (where the vendor folder resides). Make sure <code>base_url</code> in <code>behat.yml</code> is updated according to your web server.</p> <pre><code class="bash">bin/behat features/examples/_007_crud.feature </code></pre> </article> <footer> &#169; 2010 <a title="Luracast.com" href="http://luracast.com"><img src="../resources/Luracast_dark.png" width="180" height="32" title="Helping Developers with Tools, Utilities, Frameworks and Services"/></a> </footer> </body> </html>