KEMBAR78
Building Restful Applications Using Php | PDF
Bangalore PHP User Group – 31 October 2009




Building RESTful Applications Using
              PHP


                    Sudheer Satyanarayana
                        http://techchorus.net
                        http://binaryvibes.co.in
About Your Presenter

Director, Binary Vibes Information Technologies
 Pvt. Ltd (http://binaryvibes.co.in)

Free and open source software supporter

PHP programmer

Blogger - http://techchorus.net
Topics


What is REST?

Why REST?

How to use REST?
What Is REST?


Representational State Transfer

Style of software architecture

Introduced by Roy Fielding
Six Constraints Describe The Architectural Style

Client Server

Statelessness

Cacheable

Uniform interface

Layered system

Code on demand
Constraint 1: Separation Of Clients And Servers
Clients

Browser

PHP/Python/Perl/Whatever script

Desktop application

Command line

Anything that can make an HTTP request
Advantages Of Separation Of Clients And Servers


  Portability: clients are not bothered about data
storage

  Scalibility: servers are not bothered about user
interface

 Independent development of clients and servers
Constraint 2: Statelessness

 HTTP is stateless

 Server does not store client context

 Clients may hold context

  Each request contains all information
required to process the request
Advantages Of Statelessness

Servers are more scalable

Servers are more reliable

Servers are more visible for monitoring
Constraint 3 : Cacheable


 Responses indicate whether they are
cacheable

 Eliminates some client server interactions
Advantages Of Cacheability

Performance

Scalability
Constraint 4: Uniform Interface

REST is defined by four interface constraints

 Identification of resources

  Manipulation of resources through
representations

 Self descriptive messages

 Hypermedia as the engine of application state
Identification Of Resources

Resource can be anything
 Article
 Comment
 Contact
 User
 Employee
 URI – Uniform Resource Identifier
 http://example.com/article/1
 http://example.com/comment
 http://example.com/article?title=abc
Manipulation Of Resrources Through Representations

Use the HTTP verbs

 GET – retrieve one or a collection of articles
 POST – create a resource
 PUT – modify an article
 DELETE – delete an article


 http://example.com/article   GET      Return collection of articles
 http://example.com/article/1 GET      Return article whose id is 1
 http://example.com/article   POST     Create an article
 http://example.com/article/1 PUT      Modify the article whose id is 1
 http://example.com/article/1 DELETE   Delete the article whose id is 1
Self Descriptive Messages

HTTP Headers
HTTP Response Codes

1XX Informational
2XX Success
  200 Ok
  201 Created
  202 Accepted
  204 No Content
3XX Redirection
4XX Client Error
  403 Forbidden
  404 Not Found
5XX Server Error
Hypermedia As The Engine Of Application State

Provide sufficient information to access related
resources

 When http://example.com/article/1 is accessed
 Inform the client how to access the comments of
article 1

Mention http://example.com/comments?criteria=byarticle&articleid=1
in the response
Constraint 5 : Layered System

Proxies, gateways and other intermediaries

 Encapsulate legacy services

 Protect new services from legacy clients

 Load balancing

 High performance
Constraint 6: Code On Demand (Optional)

 Client downloads code from server and
executes it
 Common example: Server generating
JavaScript code
If your system conforms to these constraints it
can be called

                   RESTful
REST Advantages
Performance

Scalability

Simplicity

Modifiability

Visibility

Portability

Reliability
Tips to put these concepts into practice
PHP header() function

Use header() function to describe the response
headers

header("HTTP/1.0 404 Not Found");
header(”Location: http://example.com/movedhere”);
header('Content-type: application/xml);
header('Content-type: application/json);
Determine the request method

$_SERVER['REQUEST_METHOD']
Use cUrl from the CLI to test REST server

 Write a PHP script to make HTTP requests

 PHP supports curl, use the PHP curl_* functions

 Streams and sockets functions are also available

Telnet also works
Use Apache's mod_rewrite to make URLs pretty

Other web servers offer similar functionality

$_SERVER['REQUEST_URI']
Encode data to and decode from JSON

json_encode()
json_decode()
Authentication

HTTP Authentication

API Key in HTTP header
 apache_request_headers()
 $_SERVER
Your favourite PHP framework might have a
component to help develop RESTful servers

 Use it
Questions?
Contact me

http://twitter.com/bngsudheer
http://techchorus.net
IRC, Bonaparte on freenode.net



                Thank you
Copyright Notice



This presentation is licensed under the Creative Commons Attribution-
Noncommercial-Share Alike 2.5 India

http://creativecommons.org/licenses/by-nc-sa/2.5/in/

Building Restful Applications Using Php