RESTful applications

22
RESTful applications Norman White

description

RESTful applications. Norman White. REST . Representational state transfer Key concepts Client Server architecture built on transferring resources between clients and servers A representation of a resource is a document that captures the current or intended state of a resource - PowerPoint PPT Presentation

Transcript of RESTful applications

Page 1: RESTful  applications

RESTful applications

Norman White

Page 2: RESTful  applications

REST

• Representational state transfer• Key concepts– Client Server architecture built on transferring

resources between clients and servers– A representation of a resource is a document that

captures the current or intended state of a resource

– Usually built on top of HTTP, but doesn’t have to be

Page 3: RESTful  applications

REST Constraints• Client-Server – Uniform interface, clients not concerned with

storage• Stateless – no client context stored on server between

requests (Eg. Google Search results)• Cacheable- Clients can cache responses• Layered system – Client can not tell whether they are

connected to and end server or an intermediary• Code on demand (optional) – Srvers can extend functionality

of client by sending code to be executed on the client. (i.e. java, javascript)

• Uniform Interface – between clients and servers

Page 4: RESTful  applications

Interface Principles• Identification of resources

– Individual resources are identified in request, for example using URI’s in web systems

• Manipulation of Resources through these representations– When a client holds a representation of a resource (including

metadata), it has info to modify or delete the resource• Self-descriptive messages

– Each message has enough info to process it, including caching• Hypermedia as the engine of application state

– Clients make state transitions only through actions that are identified by the server (i.e. hyperlinks)

Page 5: RESTful  applications

Goals

• Scalability• Generality of interfaces• Independent deployment of components• Intermediary components to reduce latency,

enforce security and encapsulate legacy systems

Page 6: RESTful  applications

From Fielding Thesis REST's client–server separation of concerns simplifies component

implementation, reduces the complexity of connector semantics, improves the effectiveness of performance tuning, and increases the scalability of pure server components. Layered system constraints allow intermediaries—proxies, gateways, and firewalls—to be introduced at various points in the communication without changing the interfaces between components, thus allowing them to assist in communication translation or improve performance via large-scale, shared caching. REST enables intermediate processing by constraining messages to be self-descriptive: interaction is stateless between requests, standard methods and media types are used to indicate semantics and exchange information, and responses explicitly indicate cacheability.[10]

Page 7: RESTful  applications

RESTful web services

• Based on http• Uses GET, POST, PUT and DELETE as basic operations– GET

• List / Retrieve information – Put

• Replace object– Post

• Create a new object– DELETE

• Deletes an object

Page 8: RESTful  applications

Use Cases for Mobile

• RESTful web services make it easy for mobile apps to interact with remote data bases using AJAX requests.

• Typically, information is passed back and forth as a JSON object, where the web service can provide the object when requested, as well as update it, delete it etc.

Page 9: RESTful  applications

JSONJavaScript Object Notation

• JSON stands for JavaScript Object Notation• JSON is lightweight text-data interchange

format• JSON is language independent *• JSON is "self-describing" and easy to

understand* JSON Parsers and libraries exist for most web programming languages

Page 10: RESTful  applications

JSON Example

• {"employees": [{ "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" }]}

Page 11: RESTful  applications

JSON === Javascript object

• JSON - Evaluates to JavaScript Objects• The JSON text format is syntactically identical to

the code for creating JavaScript objects.• Because of this similarity, instead of using a

parser, a JavaScript program can use the built-in eval() function and execute JSON data to produce native JavaScript objects.

• Hence, we can move javascript objects between a server (RESTful) and a mobile app.

Page 12: RESTful  applications

Example• <!DOCTYPE html>

<html><body><h2>JSON Object Creation in JavaScript</h2><p>Name: <span id="jname"></span><br /> Age: <span id="jage"></span><br /> Address: <span id="jstreet"></span><br /> Phone: <span id="jphone"></span><br /> </p>

• <script>var JSONObject= {"name":"John Johnson","street":"Oslo West 555", "age":33,"phone":"555 1234567"};document.getElementById("jname").innerHTML=JSONObject.name document.getElementById("jage").innerHTML=JSONObject.age document.getElementById("jstreet").innerHTML=JSONObject.street document.getElementById("jphone").innerHTML=JSONObject.phone </script>

</body></html>

Page 13: RESTful  applications

But WAIT! What if I retrieve the object from a server?• I can issue a GET request to a server which returns a

JSON Object as a string.• I can then either “eval” the object or use a JSON parser

to create the object locally.• Once I have it, I can use it like any javascript object, do

computations on it, display it in a div, …• And, the reverse is true. I can take a local mobile

object (say input from the user, their location, the time, … ) and turn it into a JSON string which gets sent back to the server using PUT or POST.

Page 14: RESTful  applications

JSON Syntax

• JSON syntax is a subset of the JavaScript object notation syntax:

• Data is in name/value pairs• Data is separated by commas• Curly braces hold objects• Square brackets hold arrays

Page 15: RESTful  applications

JSON Values

• JSON values can be:• A number (integer or floating point)• A string (in double quotes)• A Boolean (true or false)• An array (in square brackets)• An object (in curly brackets)• null

Page 16: RESTful  applications

JSON Arrays• {

"employees": [{ "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" }]

• Is the same as (If I “eval” the JSON object)• var employees = [

{ "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName": "Jones" }];

• Employees[0].lastName is “Doe”

Page 17: RESTful  applications

PHP ExampleServer side

• <?php//request data from the database//code here to connect to database and get the data you want

/* Example JSON format{ "item1": "I love jquery4u", "item2": "You love jQuery4u", "item3": "We love jQuery4u"}*/

//return in JSON formatecho "{";echo "item1: ", json_encode($item1), "\n";echo "item2: ", json_encode($item2), "\n";echo "item3: ", json_encode($item3), "\n";echo "}";?>

Page 18: RESTful  applications

$.getJsonDescription: Load JSON-encoded data from the server using a GET HTTP request

jQuery.getJSON( url [, data ] [, success( data, textStatus, jqXHR ) ] ) url Type: String A string containing the URL to which the request is sent.

data Type: PlainObject A plain object or string that is sent to the server with the request.

success( data, textStatus, jqXHR ) Type: Function() A callback function that is executed if the request succeeds.

Page 19: RESTful  applications

JQUERY getJSON function$(document).ready(function(){

//attach a jQuery live event to the button $('#getdata-button').live('click', function(){

$.getJSON('json-data.php', function(data) { //alert(data); //uncomment this for debug //alert (data.item1+" "+data.item2+" "+data.item3); //further debug $('#showdata').html("<p>item1="+data.item1+" item2="+data.item2+" item3="+data.item3+"</p>"); }); });});

Json-data.php is a php page that returnsValues for item1, item2, and item3 in a json object.

Page 20: RESTful  applications

Conclusion• HTTP is actually a good basis for building web services• We can use JSON objects to move data between the client and the

server• Just add PUT and DELETE to GET and POST• Many frameworks for providing RESTful web services (like Cherrypy

in python)• Much simpler than SOAP, where each application defines it’s own

semantics• Note, web services are not the same as web servers, since they

don’t just return HTML• Many sites provide a web service API to get data.

– (i.e Flickr)

Page 21: RESTful  applications

Load pictures from Flicker• <!DOCTYPE html>

<html><head> <style>img{ height: 100px; float: left; }</style> <script src="http://code.jquery.com/jquery-1.5.js"></script></head><body> <div id="images">

</div><script>$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", { tags: "jquery", tagmode: "any", format: "json" },

• function(data) { $.each(data.items, function(i,item){ $("<img/>").attr("src", item.media.m).appendTo("#images"); if ( i == 3 ) return false; }); });</script>

</body></html>

Page 22: RESTful  applications

Questions?