SlideShare a Scribd company logo
TAKING CARE OF THE REST
                        Creating your own RESTful API Server




Monday, June 20, 2011
WHAT’S HAPPENING?



    ‣   We are in the Middle of a Revolution

    ‣   Devices and Tablets are taking over and changing the way we do things

    ‣   New devices and capabilities are arriving as we speak



Monday, June 20, 2011
WHAT THIS MEANS TO US, DEVELOPERS?


    ‣   More platforms to Explore

    ‣   Thus, more opportunities to Monetize

    ‣   Devices Divide, Developers Rule!




Monday, June 20, 2011
WHAT THIS MEANS TO US, DEVELOPERS?


    ‣   More platforms to Explore

    ‣   Thus, more opportunities to Monetize

    ‣   Devices Divide, Developers Rule!




Monday, June 20, 2011
HOW TO KEEP UP AND EXPAND ASAP?
    ‣   Create your API Server to serve data
        and some logic
    ‣   Create Hybrid Applications if possible
        ‣ HTML5
        ‣ Native (PhoneGap, Custom etc)

    ‣   Use cross-platform tools
        ‣ Adobe Flash, Flex, and AIR
        ‣ Titanium, Mosync etc

    ‣   Use least common denominator

Monday, June 20, 2011
WHY TO CREATE YOUR OWN API SERVER?
         ‣   It has the following Advantages
             • It  will serve as the remote model for your
                 apps
             • It  can hold some business logic for all your
                 apps
             • It       can be consumed from Web/Mobile/Desktop
             • It       can be exposed to 3rd party developers
             • It  can serve data in different formats to best
                 suite the device performance


Monday, June 20, 2011
HOW TO CREATE YOUR OWN API SERVER?
         ‣   Leverage on HTTP protocol
         ‣   Use REST (Representational State
             Transfer)
         ‣   Use different formats
             • Json (JavaScript Object Notation)
             • XML (eXtended Markup Language)
             • Plist (XML/Binary Property List)
             • Amf (Action Messaging Format)


Monday, June 20, 2011
INTRODUCING LURACAST RESTLER
         ‣   Easy to use RESTful API Server
         ‣   Light weight Micro-framework
         ‣   Supports many formats with two way
             auto conversion
         ‣   Written in PHP
         ‣   Free
         ‣   Open source (LGPL)

Monday, June 20, 2011
IF YOU KNOW OBJECT ORIENTED PHP


    ‣   You already know how to use RESTLER

    ‣   Its that simple




Monday, June 20, 2011
GETTING STARTED
                        Creating a hello world example in 3 steps




Monday, June 20, 2011
STEP-1 CREATE YOUR CLASS
         <?php
         class Simple {               ‣   Create a class and define its
         ! function index() {
         ! ! return 'Hello World!';
                                          methods
         ! }
         ! function sum($n1, $n2) {   ‣   Save it in root of your web site
         ! ! return $n1+$n2;
         ! }                              and name it in lower case
         }                                with .php extension
                  simple.php



Monday, June 20, 2011
STEP-2 COPY RESTLER

                                   ‣   Copy restler.php to the same web
                  restler.php          root

                                   ‣   It contains all the needed classes
                                       and interfaces




Monday, June 20, 2011
STEP-3 CREATE GATEWAY
                         <?php
                         spl_autoload_register();
                         $r = new Restler();
                         $r->addAPIClass('Simple');
                         $r->handle();
                                       index.php
         ‣   Create index.php
                                             ‣   Add Simple as the API class
         ‣   Create an instance of Restler
                                             ‣   Call the handle() method
             class


Monday, June 20, 2011
CONSUMING OUR API
                        Understanding how url mapping works




Monday, June 20, 2011
URL MAPPING




                        base_path/{gateway}/{class_name}
                        base_path/index.php/simple
                          mapped to the result of index() method in Simple class




Monday, June 20, 2011
URL MAPPING




 base_path/{gateway}/{class_name}/{method_name}
                    base_path/index.php/simple/sum
                        mapped to the result of sum() method in Simple class




Monday, June 20, 2011
ADVANCED URL MAPPING
    ‣   Use .htaccess file to remove      DirectoryIndex index.php
                                         <IfModule mod_rewrite.c>
        the index.php from the url       ! RewriteEngine On
                                         ! RewriteRule ^$ index.php [QSA,L]
        (http://rest.ler/simple/sum)     ! RewriteCond %{REQUEST_FILENAME} !-f
                                         ! RewriteCond %{REQUEST_FILENAME} !-d
                                         ! RewriteRule ^(.*)$ index.php [QSA,L]
                                         </IfModule>
    ‣   Pass an empty string as the
        second parameter for             <?php
        addAPIClass() method             spl_autoload_register();
        (http://rest.ler/sum)            $r = new Restler();
                                         $r->addAPIClass('Simple','');
                                         $r->handle();
    ‣   These are just conventions, we
        can use a javadoc style      /**
        comment to configure          * @url GET math/add
        (http://rest.ler/math/add) */function sum($n1, $n2)        {
                                       ! return $n1+$n2;
                                       }
Monday, June 20, 2011
PASSING PARAMETERS




                        .../{class_name}/{param1}/{param2}
                                   .../simple/4/5
                              parameters are passed in order as url itself




Monday, June 20, 2011
PASSING PARAMETERS




        .../{class_name}?param1=value&param2=value
                        .../simple?n1=4&n2=5
                         named parameters passed as query string




Monday, June 20, 2011
RETURNING COMPLEX DATA
         <?php
         class Simple {
         ! function index() {
                                             ‣   Restler can handle all the
         ! ! return 'Hello World!';              following PHP types
         ! }
         ! function sum($n1, $n2) {
         ! ! return array('sum'=>$n1+$n2);
         ! }                                     ✓Number
         }

                                                 ✓Boolean   (True | False)

                                                 ✓String

                                                 ✓Indexed/Associative   array

                                                 ✓Objects


Monday, June 20, 2011
SUPPORTING FORMATS
       <?php
       $r = new Restler();             ‣   Step1 - Copy the format file(s)
       $r->addAPIClass('Simple','');
       $r->setSupportedFormats(        ‣   Step2 - Call setSupportedFormats()
            'XmlFormat','JsonFormat'       method and pass the formats
       );
       $r->handle();
                                       ‣   Restler supports the following
                                           formats
                                           -   JSON
                                           -   XML
                                           -   Plist
                                           -   AMF
                                           -   YAML

Monday, June 20, 2011
PROTECTING SOME OF THE API
    <?php
    class SimpleAuth implements iAuthenticate{
    ! function __isAuthenticated() {
    ! ! return $_GET['token']=='178261dsjdkjho8f' ? TRUE : FALSE;
    ! }
    }


    <?php
    $r = new Restler();                         ‣   Step1 - Create an Auth Class
    $r->addAPIClass('Simple','');
    $r->setSupportedFormats(                        implementing iAuthenicate interface
       'XmlFormat','JsonFormat'
    );
    $r->addAuthenticationClass('SimpleAuth');   ‣   Step2 - Call addAuthenticationClass()
    $r->handle();
                                                    method and pass that class
     protected function sum($n1, $n2) {         ‣   Simply change the methods to be
     ! return array('sum'=>$n1+$n2);
     }                                              protected as protected methods

Monday, June 20, 2011
USING HTTP METHODS & CRUD

      <?php
      class User {
      ! $dp = new DataProvider('User');            ‣   GET - Retrieve
      ! function get() {
      ! ! return $this->dp->getAll();
      ! }
      ! function post($data) {                     ‣   POST - Create
      ! ! return $this->dp->create($data);
      ! }
      ! function put($idx, $data) {
      ! ! return $this->dp->update($idx, $data);
                                                   ‣   PUT - Update
      ! }
      ! function delete($idx, $data) {
      ! ! return $this->dp->delete($idx, $data);   ‣   DELETE - Delete
      ! }
      }




Monday, June 20, 2011
REAL WORLD RESTLER EXAMPLE




Monday, June 20, 2011
ABOUT LURACAST




Monday, June 20, 2011

More Related Content

PDF
Shell Scripting Tutorial | Edureka
PPT
PPT
PPT
Introduction to web and php mysql
PPTX
PL/SQL Fundamentals I
PDF
Thumbtack Expertise Days # 5 - Javaz
PDF
Anonymous Functions in PHP 5.3 - Matthew Weier O’Phinney
PDF
Packages - PL/SQL
Shell Scripting Tutorial | Edureka
Introduction to web and php mysql
PL/SQL Fundamentals I
Thumbtack Expertise Days # 5 - Javaz
Anonymous Functions in PHP 5.3 - Matthew Weier O’Phinney
Packages - PL/SQL

What's hot (20)

PPTX
Maintaining sanity in a large redux app
PPT
Php my sql - functions - arrays - tutorial - programmerblog.net
PDF
Interchange 6 - Open Source Shop Machine
PDF
Drupal 8's Multilingual APIs: Building for the Entire World
PPTX
ORACLE PL SQL FOR BEGINNERS
PPTX
Arrays &amp; functions in php
PPT
Php Chapter 1 Training
PPTX
Procedure and Functions in pl/sql
PDF
Reactive cocoa
PPTX
Licão 13 functions
PDF
Ruby on Rails at PROMPT ISEL '11
PDF
08 Advanced PHP #burningkeyboards
PDF
Programming in Oracle with PL/SQL
ODP
My sql
PPT
Php Chapter 2 3 Training
PPTX
PLSQL Tutorial
PPT
Db Triggers05ch
PDF
PHP Unit 3 functions_in_php_2
PDF
The ruby on rails i18n core api-Neeraj Kumar
PDF
InfiniFlux collector
Maintaining sanity in a large redux app
Php my sql - functions - arrays - tutorial - programmerblog.net
Interchange 6 - Open Source Shop Machine
Drupal 8's Multilingual APIs: Building for the Entire World
ORACLE PL SQL FOR BEGINNERS
Arrays &amp; functions in php
Php Chapter 1 Training
Procedure and Functions in pl/sql
Reactive cocoa
Licão 13 functions
Ruby on Rails at PROMPT ISEL '11
08 Advanced PHP #burningkeyboards
Programming in Oracle with PL/SQL
My sql
Php Chapter 2 3 Training
PLSQL Tutorial
Db Triggers05ch
PHP Unit 3 functions_in_php_2
The ruby on rails i18n core api-Neeraj Kumar
InfiniFlux collector
Ad

Viewers also liked (6)

PDF
Testing and Documenting Pragmatic / RESTful Web API
PDF
Hello World on Slim Framework 3.x
ODP
Creating REST Applications with the Slim Micro-Framework by Vikram Vaswani
PDF
Consuming RESTful services in PHP
PDF
Web Services PHP Tutorial
PPTX
RESTful API 제대로 만들기
Testing and Documenting Pragmatic / RESTful Web API
Hello World on Slim Framework 3.x
Creating REST Applications with the Slim Micro-Framework by Vikram Vaswani
Consuming RESTful services in PHP
Web Services PHP Tutorial
RESTful API 제대로 만들기
Ad

Similar to Taking Care of The REST - Creating your own RESTful API Server using Restler 2.0 (20)

KEY
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
PDF
Building Custom PHP Extensions
ODP
Mastering Namespaces in PHP
PPT
PDF
Giới thiệu PHP 7
PDF
From CakePHP to Laravel
PDF
PHP 5.3 Overview
PDF
02 - Second meetup
PDF
RESTful API development in Laravel 4 - Christopher Pecoraro
PDF
Phpspec tips&amp;tricks
PDF
Living With Legacy Code
PDF
PHP Versions Upgradation - What's New vs Old Version.pdf
PDF
Creating a modern web application using Symfony API Platform Atlanta
PDF
Elements of Functional Programming in PHP
PDF
Bootstrat REST APIs with Laravel 5
ODP
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
PDF
Introduction to PHP - Basics of PHP
PDF
Creating a modern web application using Symfony API Platform, ReactJS and Red...
PPT
Php mysql
PPTX
FYBSC IT Web Programming Unit IV PHP and MySQL
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Building Custom PHP Extensions
Mastering Namespaces in PHP
Giới thiệu PHP 7
From CakePHP to Laravel
PHP 5.3 Overview
02 - Second meetup
RESTful API development in Laravel 4 - Christopher Pecoraro
Phpspec tips&amp;tricks
Living With Legacy Code
PHP Versions Upgradation - What's New vs Old Version.pdf
Creating a modern web application using Symfony API Platform Atlanta
Elements of Functional Programming in PHP
Bootstrat REST APIs with Laravel 5
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Introduction to PHP - Basics of PHP
Creating a modern web application using Symfony API Platform, ReactJS and Red...
Php mysql
FYBSC IT Web Programming Unit IV PHP and MySQL

More from Arul Kumaran (7)

PDF
Getting out of Callback Hell in PHP
PPTX
Accelerating Xamarin Development
PPTX
iOS Native Development with Xamarin
PDF
Less Verbose ActionScript 3.0 - Write less and do more!
KEY
Using Titanium for multi-platform development including iPhone and Android
PPT
UI Interactions Testing with FlexMonkey
PPS
Flex Production Tips & Techniques
Getting out of Callback Hell in PHP
Accelerating Xamarin Development
iOS Native Development with Xamarin
Less Verbose ActionScript 3.0 - Write less and do more!
Using Titanium for multi-platform development including iPhone and Android
UI Interactions Testing with FlexMonkey
Flex Production Tips & Techniques

Recently uploaded (20)

PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
HCSP-Presales-Campus Network Planning and Design V1.0 Training Material-Witho...
PPTX
Cloud computing and distributed systems.
PDF
Chapter 2 Digital Image Fundamentals.pdf
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Advanced Soft Computing BINUS July 2025.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PDF
Modernizing your data center with Dell and AMD
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Chapter 3 Spatial Domain Image Processing.pdf
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Review of recent advances in non-invasive hemoglobin estimation
HCSP-Presales-Campus Network Planning and Design V1.0 Training Material-Witho...
Cloud computing and distributed systems.
Chapter 2 Digital Image Fundamentals.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
20250228 LYD VKU AI Blended-Learning.pptx
Electronic commerce courselecture one. Pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Advanced Soft Computing BINUS July 2025.pdf
Understanding_Digital_Forensics_Presentation.pptx
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
Modernizing your data center with Dell and AMD
Diabetes mellitus diagnosis method based random forest with bat algorithm
How UI/UX Design Impacts User Retention in Mobile Apps.pdf

Taking Care of The REST - Creating your own RESTful API Server using Restler 2.0

  • 1. TAKING CARE OF THE REST Creating your own RESTful API Server Monday, June 20, 2011
  • 2. WHAT’S HAPPENING? ‣ We are in the Middle of a Revolution ‣ Devices and Tablets are taking over and changing the way we do things ‣ New devices and capabilities are arriving as we speak Monday, June 20, 2011
  • 3. WHAT THIS MEANS TO US, DEVELOPERS? ‣ More platforms to Explore ‣ Thus, more opportunities to Monetize ‣ Devices Divide, Developers Rule! Monday, June 20, 2011
  • 4. WHAT THIS MEANS TO US, DEVELOPERS? ‣ More platforms to Explore ‣ Thus, more opportunities to Monetize ‣ Devices Divide, Developers Rule! Monday, June 20, 2011
  • 5. HOW TO KEEP UP AND EXPAND ASAP? ‣ Create your API Server to serve data and some logic ‣ Create Hybrid Applications if possible ‣ HTML5 ‣ Native (PhoneGap, Custom etc) ‣ Use cross-platform tools ‣ Adobe Flash, Flex, and AIR ‣ Titanium, Mosync etc ‣ Use least common denominator Monday, June 20, 2011
  • 6. WHY TO CREATE YOUR OWN API SERVER? ‣ It has the following Advantages • It will serve as the remote model for your apps • It can hold some business logic for all your apps • It can be consumed from Web/Mobile/Desktop • It can be exposed to 3rd party developers • It can serve data in different formats to best suite the device performance Monday, June 20, 2011
  • 7. HOW TO CREATE YOUR OWN API SERVER? ‣ Leverage on HTTP protocol ‣ Use REST (Representational State Transfer) ‣ Use different formats • Json (JavaScript Object Notation) • XML (eXtended Markup Language) • Plist (XML/Binary Property List) • Amf (Action Messaging Format) Monday, June 20, 2011
  • 8. INTRODUCING LURACAST RESTLER ‣ Easy to use RESTful API Server ‣ Light weight Micro-framework ‣ Supports many formats with two way auto conversion ‣ Written in PHP ‣ Free ‣ Open source (LGPL) Monday, June 20, 2011
  • 9. IF YOU KNOW OBJECT ORIENTED PHP ‣ You already know how to use RESTLER ‣ Its that simple Monday, June 20, 2011
  • 10. GETTING STARTED Creating a hello world example in 3 steps Monday, June 20, 2011
  • 11. STEP-1 CREATE YOUR CLASS <?php class Simple { ‣ Create a class and define its ! function index() { ! ! return 'Hello World!'; methods ! } ! function sum($n1, $n2) { ‣ Save it in root of your web site ! ! return $n1+$n2; ! } and name it in lower case } with .php extension simple.php Monday, June 20, 2011
  • 12. STEP-2 COPY RESTLER ‣ Copy restler.php to the same web restler.php root ‣ It contains all the needed classes and interfaces Monday, June 20, 2011
  • 13. STEP-3 CREATE GATEWAY <?php spl_autoload_register(); $r = new Restler(); $r->addAPIClass('Simple'); $r->handle(); index.php ‣ Create index.php ‣ Add Simple as the API class ‣ Create an instance of Restler ‣ Call the handle() method class Monday, June 20, 2011
  • 14. CONSUMING OUR API Understanding how url mapping works Monday, June 20, 2011
  • 15. URL MAPPING base_path/{gateway}/{class_name} base_path/index.php/simple mapped to the result of index() method in Simple class Monday, June 20, 2011
  • 16. URL MAPPING base_path/{gateway}/{class_name}/{method_name} base_path/index.php/simple/sum mapped to the result of sum() method in Simple class Monday, June 20, 2011
  • 17. ADVANCED URL MAPPING ‣ Use .htaccess file to remove DirectoryIndex index.php <IfModule mod_rewrite.c> the index.php from the url ! RewriteEngine On ! RewriteRule ^$ index.php [QSA,L] (http://rest.ler/simple/sum) ! RewriteCond %{REQUEST_FILENAME} !-f ! RewriteCond %{REQUEST_FILENAME} !-d ! RewriteRule ^(.*)$ index.php [QSA,L] </IfModule> ‣ Pass an empty string as the second parameter for <?php addAPIClass() method spl_autoload_register(); (http://rest.ler/sum) $r = new Restler(); $r->addAPIClass('Simple',''); $r->handle(); ‣ These are just conventions, we can use a javadoc style /** comment to configure * @url GET math/add (http://rest.ler/math/add) */function sum($n1, $n2) { ! return $n1+$n2; } Monday, June 20, 2011
  • 18. PASSING PARAMETERS .../{class_name}/{param1}/{param2} .../simple/4/5 parameters are passed in order as url itself Monday, June 20, 2011
  • 19. PASSING PARAMETERS .../{class_name}?param1=value&param2=value .../simple?n1=4&n2=5 named parameters passed as query string Monday, June 20, 2011
  • 20. RETURNING COMPLEX DATA <?php class Simple { ! function index() { ‣ Restler can handle all the ! ! return 'Hello World!'; following PHP types ! } ! function sum($n1, $n2) { ! ! return array('sum'=>$n1+$n2); ! } ✓Number } ✓Boolean (True | False) ✓String ✓Indexed/Associative array ✓Objects Monday, June 20, 2011
  • 21. SUPPORTING FORMATS <?php $r = new Restler(); ‣ Step1 - Copy the format file(s) $r->addAPIClass('Simple',''); $r->setSupportedFormats( ‣ Step2 - Call setSupportedFormats() 'XmlFormat','JsonFormat' method and pass the formats ); $r->handle(); ‣ Restler supports the following formats - JSON - XML - Plist - AMF - YAML Monday, June 20, 2011
  • 22. PROTECTING SOME OF THE API <?php class SimpleAuth implements iAuthenticate{ ! function __isAuthenticated() { ! ! return $_GET['token']=='178261dsjdkjho8f' ? TRUE : FALSE; ! } } <?php $r = new Restler(); ‣ Step1 - Create an Auth Class $r->addAPIClass('Simple',''); $r->setSupportedFormats( implementing iAuthenicate interface 'XmlFormat','JsonFormat' ); $r->addAuthenticationClass('SimpleAuth'); ‣ Step2 - Call addAuthenticationClass() $r->handle(); method and pass that class protected function sum($n1, $n2) { ‣ Simply change the methods to be ! return array('sum'=>$n1+$n2); } protected as protected methods Monday, June 20, 2011
  • 23. USING HTTP METHODS & CRUD <?php class User { ! $dp = new DataProvider('User'); ‣ GET - Retrieve ! function get() { ! ! return $this->dp->getAll(); ! } ! function post($data) { ‣ POST - Create ! ! return $this->dp->create($data); ! } ! function put($idx, $data) { ! ! return $this->dp->update($idx, $data); ‣ PUT - Update ! } ! function delete($idx, $data) { ! ! return $this->dp->delete($idx, $data); ‣ DELETE - Delete ! } } Monday, June 20, 2011
  • 24. REAL WORLD RESTLER EXAMPLE Monday, June 20, 2011