2. Objectives
• Why build HTML client applications
• Key REST principles
• Technologies to build client applications
• HTTP, JSON, AJAX
• Consuming REST with PHP and cURL library
• PHP and JSON
• Consuming REST with jQuery
• LAB: Client application for listing and commenting movies
• Real world example: DEPTHS
2
4. Key REST principles
• Give every “thing” an ID
• Link things together
• Use standard methods
• Resources with multiple representations
• Communicate statelessly
4
5. Technologies
• Todays’s set of technologies used to empower RESTful paradigm:
– HTTP as the basis,
– PHP to add dynamic behaviour to HTML pages,
– XML and JSON for data exchange, and
– AJAX and jQuery for client-side programming (e.g. browser).
5
7. HTTP
Overview
• Hypertext Transfer Protocol (HTTP)
– A protocol for distributed, collaborative, hypermedia information systems.
– Currently dominant version is HTTP/1.1.
• Massively used to deliver content over the Web
– Web browsers and spiders are relying on HTTP.
• The protocol is not constrained to TPC/IP
– It only presumes a reliable transport.
• Resources accessed by HTTP are identified by URIs (more specifically
URLs), using the http URI schemes.
• HTTP functions as a request-response protocol in the client-server
computing model.
7
8. HTTP
Request methods
• HTTP request methods indicate the desired action to be performed on
the identified resource:
– GET
• Requests a representation of the specified resource. GET should not be used for operations
that cause side-effects (problematic with robots and crawlers). Those operations are called
safe operations.
– POST
• Submits data to be processed (e.g., from an HTML form) to the identified resource. The data
is included in the body of the request.
– PUT
• Uploads a representation of the specified resource.
– DELETE
• Deletes the specified resource.
8
9. JSON
Overview
• JavaScript Object Notation (JSON)
– A lightweight computer data interchange format.
• Represents a simple alternative to XML
– A text-based, human-readable format for representing simple data structures and
associative arrays (called objects).
• Used by a growing number of services
• JavaScript-friendly notation
– Its main application is in Ajax Web application programming.
• A serialized object or array
• No namespaces, attributes etc.
• No schema language (for description, verification)
9
11. AJAX
Overview
• Asynchronous JavaScript and XML (AJAX)
– A group of interrelated web development techniques used on the client-side to create
interactive web applications
– Web apps can fetch data from the server without refreshing the page
• AJAX is used to increase interactivity and dynamic of web pages
• Since the technological base is partially shared AJAX and RESTful
services make a good match
– Enriching Web pages with the data operated through RESTful services
11
12. AJAX
• Enable asynchronous communication between a web client and a
server.
• A client is not blocked when an asynchronous request is sent to a
server. It assigns an event handler to intercept the response instead.
• The technology is not limited to XML encoded data.
12
14. AJAX: Building a Request (4 steps)
• Step 1: Creating a XML HTTP Request object
var xmlhttp = new XMLHttpRequest();
• Step 2: Specifying where and how to retrieve the resource
xmlhttp.open('GET', 'foo.php', true);
• Step 3: Setting a function to be called when the response is returned by
the server
xmlhttp.onreadystatechange = function() {
// Code to handle the response here
}
• Step 4: Send the request
xmlhttp.send(null); - string argument used for POST
• Note: Between step 2 and 3, the order is not important.
14
16. What is libcurl?
• libcurl is a free and easy-to-use client-side URL transfer library,
supporting FTP, FTPS, TFTP, HTTP, HTTPS, TELNET, DICT, FILE and
LDAP. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP
uploading, HTTP form based upload, proxies, cookies, user+password
authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file transfer
resume, http proxy tunneling and more!
16
17. What is PHP/CURL Binding?
• PHP/CURL is a binding that uses libcurl. It means that the PHP team
has written a glue layer for PHP that speaks to the underlying libcurl.
That layer, the binding, is what we call PHP/CURL and that is what
offers the functions named curl_* within the PHP language for you. The
PHP/CURL binding is written, maintained and being provided by the
PHP team.
17
18. Installing the PHP/CURL binding
in Window
• Activation of PHP/CURL on windows : removing a semicolon from the
following line in php.ini: ;extension=php_curl.dll
• In order to enable SSL-based protocols (such as HTTPS and FTPS) in
your Windows environment : copy libeay32.dll and ssleay32.dll from the
DLL folder of the PHP/ binary package to the SYSTEM folder of your
Windows machine. (Ex: C:WINNTSYSTEM32 or
C:WINDOWSSYSTEM).
18
19. How to use the CURL functions ?
1. initialize a CURL session using the
curl_init()
2. set all options for the transfer via the
curl_setopt()
3. execute the session with the
curl_exec()
4. finish off your session using the
curl_close()
19
20. Simple example
Filling Out Forms
<form method="post" action="form_processing_page.php">
<input type="text" name="name" />
<input type="text" name="color" />
</form>
Processing form
$name = $_POST[‘name'];
$color = $_POST[‘color'];
20
21. Simple example
// specify the URL to request
$url = 'http://www.example.com/form.php';
// set up data to send to the form
$data = array('name' => $name, 'color' => $color);
// create cURL session
$ch = curl_init();
// set the URL
curl_setopt($ch, CURLOPT_URL, $url);
// return the response instead of printing
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// set request method to POST
curl_setopt($ch, CURLOPT_POST, true);
// set the data to send
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// send the request and store the response in $resp
$resp= curl_exec($ch);
// end the session
curl_close($ch);
?>
21
25. Loading data from the service
• JSON is the data format of choice
– JavaScript Object Notation
• Use the XMLHTTPRequest object
– jQuery makes this very easy
• jQuery.ajax()
– Perform an asynchronous HTTP (Ajax) request
– Uses an options object that configure the Ajax request
• jQuery.getJSON()
– Load JSON data using an asynchronous HTTP GET request
25
27. jQuery client - getJSON()
$.getJSON( url, [data], [callback], [type] )
• url: (String) The URL of the page to load.
• data (Optional): (Map) Key/value pairs that will be sent to the server.
• callback (Optional): (Function) A function to be executed whenever the data is
loaded successfully.
• type (Optional): (String) Type of data to be returned to callback function: “xml”, “html”,
“script”, “json”, “jsonp”, or “text”.
$.getJSON(
"http://some-remote-site",
"{key:value}",
function(data) { alert(data); },
“json");
$.getJSON(
"http://some-remote-site",
function(data) { alert(data); },
);
27
29. Lab: Client application for listing and commenting movies
• Create client application that uses RESTful web service to get list of all
movies and present it as a list (movie title and release date).
• User can add comment for each movie
• User can see additional information about each movie (its genre and
comments added by other users.
29
30. Lab:RESTful services of web application “movieweb”
• RESTful Web services providing data for client application
• List all movies
– GET http://localhost:8080/moviesweb/rest/movies
• Adding new comment
– POST http://localhost:8080/moviesweb/rest/comments
• List additional data about each movie and users’ comments
– GET http://localhost:8080/moviesweb/rest/movies/movieid
30
42. DEPTHS (Design Patterns Teaching Help System)
REAL WORLD EXAMPLE
More info and demo
http://learningdesignpatterns.org
42
43. Personal Learning Environment - DEPTHS
• Provides users with personal learning environment for project-based
collaborative learning
• Semantic Web
• Integration of data from different and heterogeneous sources, tools and
services.
– Moodle LMS, ArgoUML, Facebook, Twitter
• Educational services for recommendation of relevant peers.
• Modeling the semantics of one’s presence in the online world.
43
43
46. Educational services in OP4L
• Context-aware learning services
– Semantic annotation and indexing service
– Web resource finding
– Discovery of relevant internally produced resources
– Experts, teachers and peers recommendation
46
46