SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
TESTING AND
                       DOCUMENTING
                       PRAGMATIC/
                         RESTFUL
                          WEB API


              Arul Kumaran
Author of Restler - a Pragmatic/RESTful API framework
SETTING THE CONTEXT
           RIGHT
Reminding myself:
‣ I’m presenting in a
  JavaScript
  User Group

‣ I need to keep it short
  and simple at least to
  begin with
WHAT,WHY AND HOW

? is the beginning
‣ What is
  RESTful/Pragmatic API

‣ Why it requires
  documentation and testing

‣ How to do
  documentation and testing
WHAT IS RESTFUL/
         PRAGMATIC API
one leads to more
‣ What is Web API?
‣ What is REST?
‣ What is Pragmatic API?
WEB APPLICATION
PROGRAMMING INTERFACE
When it all started
Web is mainly used for
human to human           Data   + Presentation
communication using
HTML as the medium              =
which is Data and
Presentation put
together
WEB APPLICATION
PROGRAMMING INTERFACE
Then the change
By just sending pure
data as XML, JSON etc,     Data   Presentation
It can interpreted by a
client or another server
in a meaningful way
opening the door of
possibilities
REPRESENTATIONAL STATE
         TRANSFER
Set of constraints ‣
‣ Client-server
‣ Stateless        ‣ Code on demand
                       (optional)
‣ Cacheable
                   ‣ Uniform Interface
‣ Layered system
WHY PRAGMATIC WEB API

 REST is not easy
                                              is_request_ok
  500 Internal Server Error            B2
                               false                true


                                            false
                                              is_forbidden                            Accept exists?
       403 Forbidden                   B3                                        C3
                               true                                                        false
                                                                         true
                                             true

                                              is_authorized                           content_types_provided                   Accept-Language exists?
     401 Unauthorized                  B4                                        C4                                       D4
                               false                                                        true                                    false
                                                                         false                                    true
                                            false

                                              content_types_accepted:handler                                                   languages_provided                        Accept-Charset exists?
     400 Bad Request                   B5                                                                                 D5                                        E5
                               true                                                                                                 true                                      false
                                                                                                                  false                                     true
                                            false
                                              content_types_accepted                                                                                                     charsets_provided                     Accept-Encoding exists?
415 Unsupported Media Type             B6                                                                                                                           E6                                    F6
                               true                                                                                                                                           true                                  false
                                                                                                                                                            false                                 true
                                            false

                                              valid_entity_length                                                                                                                                              encodings_provided
413 Request Entity Too Large           B7                                                                                                                                                                 F7                                    G7
                               true                                                                                                                                                                                 true
                                                                                                                                                                                                  false                                  true
                                            false

                                              valid_content_headers                                                                                                      is_accept_ok
   501 Not Implemented                 B8                                                                      406 Not Acceptable                                   E8
                               true                                                                                                                 false                     true


                                            false
                                              options                                 If-Match exists?
DOCUMENTING API

Why it is needed?
‣ One Creates API and
 Another consumes

‣ There should be an
 easy way with out
 sitting next to each
 other
DOCUMENTING API

Why it is needed?
‣ Missing presentation
 layer makes it difficult
 to discover and
 navigate around API
DOCUMENTING API

How to do it?
‣ Where to write it?
‣ How to maintain it in
  sync with ever
  changing API
MEET SWAGGER

Start with JSON             ‣

‣ Write how your api will
 work
                            ‣ Build your API,
‣ What it takes in              Documentation and
                                Testing interface in one
‣ What it spits out             go
MEET SWAGGER UI

Or start with server            ‣

‣ It produces a resource list
‣ Declares each API             ‣ Swagger UI can use that to
  ‣ Available operations            produce a UI for testing &
  ‣ Parameters                      documentation
  ‣ Request Response models
  ‣ Error responses and
    description
RESOURCE LIST

{"apiVersion" : "0.2", "swaggerVersion" : "1.1", "basePath" : "http://
petstore.swagger.wordnik.com/api", "apis" : [
   {
      "path" : "/api-docs.{format}/user",
      "description" : ""
   },                                                 It’s like
   {                                              site-map to
      "path" : "/api-docs.{format}/pet",             your API
      "description" : ""
   }
]}
API DESCRIPTION
{"apiVersion" : "0.2", "swaggerVersion" : "1.1", "basePath" : "http://petstore.swagger.wordnik.com/api",
"resourcePath" : "/pet", "apis" : [
   {
       "path" : "/pet.{format}/{petId}",
       "description" : "Operations about pets",
       "operations" : [
            {
              "httpMethod" : "GET", "summary" : "Find pet by ID",
              "notes" : "Returns a pet based on ID",
              "responseClass" : "Pet", "nickname" : "getPetById",
              "parameters" : [ {
                     "name" : "petId", "description" : "ID of pet that needs to be fetched",
                     "paramType" : "path", "required" : true, "allowMultiple" : false, "dataType" : "string"
                 } ],
              "errorResponses" : [
                 { "code" : 400, "reason" : "Invalid ID supplied" },
                 { "code" : 404, "reason" : "Pet not found" }
              ]
            }
       ]
   }, //...
END RESULT
MEET LURACAST
              RESTLER
Write OO PHP           ‣

‣ Well written, Well
 commented PHP
 API becomes Well      ‣ RESTler Explorer
                           provides the
 written, Well
                           documentation and
 documented Web
                           testing interface
 API
OBJECT ORIENTED PHP
<?php
use	
  LuracastRestlerRestException;
use	
  DB_Session;
class	
  Authors
{
	
  	
  	
  	
  public	
  $dp;
	
  	
  	
  	
  /**
	
  	
  	
  	
  	
  *	
  @status	
  201
	
  	
  	
  	
  	
  *
	
  	
  	
  	
  	
  *	
  @param	
  string	
  $name	
  	
  {@from	
  body}
	
  	
  	
  	
  	
  *	
  @param	
  string	
  $email	
  {@type	
  email}	
  {@from	
  body}
	
  	
  	
  	
  	
  *
	
  	
  	
  	
  	
  *	
  @return	
  mixed
	
  	
  	
  	
  	
  */
	
  	
  	
  	
  function	
  post($name,	
  $email)
	
  	
  	
  	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  $this-­‐>dp-­‐>insert(compact('name',	
  'email'));
	
  	
  	
  	
  }
API EXPLORER
BEHAVIOR DRIVEN API
           DEVELOPMENT


Scenario:	
  Multiply                                                        Gherkin
	
  	
  	
  	
  Given	
  that	
  "n1"	
  is	
  set	
  to	
  "10"
	
  	
  	
  	
  And	
  "n2"	
  is	
  set	
  to	
  "5"
	
  	
  	
  	
  When	
  I	
  request	
  "/examples/_002_minimal/math/multiply/{n1}/{n2}"
	
  	
  	
  	
  And	
  the	
  response	
  is	
  JSON
	
  	
  	
  	
  And	
  the	
  response	
  has	
  a	
  "result"	
  property
	
  	
  	
  	
  And	
  the	
  "result"	
  property	
  equals	
  50
                                                                         Savoury pickled cucumber
WHAT,WHY AND HOW

RECAP
‣ What is
  RESTful/Pragmatic API

‣ Why it requires
  documentation and testing

‣ How to do
  documentation and testing
ABOUT ME




@_Arul     @Luracast

Weitere ähnliche Inhalte

Mehr von Arul Kumaran

Mehr von Arul Kumaran (6)

Accelerating Xamarin Development
Accelerating Xamarin DevelopmentAccelerating Xamarin Development
Accelerating Xamarin Development
 
iOS Native Development with Xamarin
iOS Native Development with XamariniOS Native Development with Xamarin
iOS Native Development with Xamarin
 
Less Verbose ActionScript 3.0 - Write less and do more!
Less Verbose ActionScript 3.0 - Write less and do more!Less Verbose ActionScript 3.0 - Write less and do more!
Less Verbose ActionScript 3.0 - Write less and do more!
 
Using Titanium for multi-platform development including iPhone and Android
Using Titanium for multi-platform development including iPhone and AndroidUsing Titanium for multi-platform development including iPhone and Android
Using Titanium for multi-platform development including iPhone and Android
 
UI Interactions Testing with FlexMonkey
UI Interactions Testing with FlexMonkeyUI Interactions Testing with FlexMonkey
UI Interactions Testing with FlexMonkey
 
Flex Production Tips & Techniques
Flex Production Tips & TechniquesFlex Production Tips & Techniques
Flex Production Tips & Techniques
 

Kürzlich hochgeladen

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Kürzlich hochgeladen (20)

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 

Testing and Documenting Pragmatic / RESTful Web API

  • 1. TESTING AND DOCUMENTING PRAGMATIC/ RESTFUL WEB API Arul Kumaran Author of Restler - a Pragmatic/RESTful API framework
  • 2. SETTING THE CONTEXT RIGHT Reminding myself: ‣ I’m presenting in a JavaScript User Group ‣ I need to keep it short and simple at least to begin with
  • 3. WHAT,WHY AND HOW ? is the beginning ‣ What is RESTful/Pragmatic API ‣ Why it requires documentation and testing ‣ How to do documentation and testing
  • 4. WHAT IS RESTFUL/ PRAGMATIC API one leads to more ‣ What is Web API? ‣ What is REST? ‣ What is Pragmatic API?
  • 5. WEB APPLICATION PROGRAMMING INTERFACE When it all started Web is mainly used for human to human Data + Presentation communication using HTML as the medium = which is Data and Presentation put together
  • 6. WEB APPLICATION PROGRAMMING INTERFACE Then the change By just sending pure data as XML, JSON etc, Data Presentation It can interpreted by a client or another server in a meaningful way opening the door of possibilities
  • 7. REPRESENTATIONAL STATE TRANSFER Set of constraints ‣ ‣ Client-server ‣ Stateless ‣ Code on demand (optional) ‣ Cacheable ‣ Uniform Interface ‣ Layered system
  • 8. WHY PRAGMATIC WEB API REST is not easy is_request_ok 500 Internal Server Error B2 false true false is_forbidden Accept exists? 403 Forbidden B3 C3 true false true true is_authorized content_types_provided Accept-Language exists? 401 Unauthorized B4 C4 D4 false true false false true false content_types_accepted:handler languages_provided Accept-Charset exists? 400 Bad Request B5 D5 E5 true true false false true false content_types_accepted charsets_provided Accept-Encoding exists? 415 Unsupported Media Type B6 E6 F6 true true false false true false valid_entity_length encodings_provided 413 Request Entity Too Large B7 F7 G7 true true false true false valid_content_headers is_accept_ok 501 Not Implemented B8 406 Not Acceptable E8 true false true false options If-Match exists?
  • 9. DOCUMENTING API Why it is needed? ‣ One Creates API and Another consumes ‣ There should be an easy way with out sitting next to each other
  • 10. DOCUMENTING API Why it is needed? ‣ Missing presentation layer makes it difficult to discover and navigate around API
  • 11. DOCUMENTING API How to do it? ‣ Where to write it? ‣ How to maintain it in sync with ever changing API
  • 12. MEET SWAGGER Start with JSON ‣ ‣ Write how your api will work ‣ Build your API, ‣ What it takes in Documentation and Testing interface in one ‣ What it spits out go
  • 13. MEET SWAGGER UI Or start with server ‣ ‣ It produces a resource list ‣ Declares each API ‣ Swagger UI can use that to ‣ Available operations produce a UI for testing & ‣ Parameters documentation ‣ Request Response models ‣ Error responses and description
  • 14. RESOURCE LIST {"apiVersion" : "0.2", "swaggerVersion" : "1.1", "basePath" : "http:// petstore.swagger.wordnik.com/api", "apis" : [ { "path" : "/api-docs.{format}/user", "description" : "" }, It’s like { site-map to "path" : "/api-docs.{format}/pet", your API "description" : "" } ]}
  • 15. API DESCRIPTION {"apiVersion" : "0.2", "swaggerVersion" : "1.1", "basePath" : "http://petstore.swagger.wordnik.com/api", "resourcePath" : "/pet", "apis" : [ { "path" : "/pet.{format}/{petId}", "description" : "Operations about pets", "operations" : [ { "httpMethod" : "GET", "summary" : "Find pet by ID", "notes" : "Returns a pet based on ID", "responseClass" : "Pet", "nickname" : "getPetById", "parameters" : [ { "name" : "petId", "description" : "ID of pet that needs to be fetched", "paramType" : "path", "required" : true, "allowMultiple" : false, "dataType" : "string" } ], "errorResponses" : [ { "code" : 400, "reason" : "Invalid ID supplied" }, { "code" : 404, "reason" : "Pet not found" } ] } ] }, //...
  • 17. MEET LURACAST RESTLER Write OO PHP ‣ ‣ Well written, Well commented PHP API becomes Well ‣ RESTler Explorer provides the written, Well documentation and documented Web testing interface API
  • 18. OBJECT ORIENTED PHP <?php use  LuracastRestlerRestException; use  DB_Session; class  Authors {        public  $dp;        /**          *  @status  201          *          *  @param  string  $name    {@from  body}          *  @param  string  $email  {@type  email}  {@from  body}          *          *  @return  mixed          */        function  post($name,  $email)        {                return  $this-­‐>dp-­‐>insert(compact('name',  'email'));        }
  • 20. BEHAVIOR DRIVEN API DEVELOPMENT Scenario:  Multiply Gherkin        Given  that  "n1"  is  set  to  "10"        And  "n2"  is  set  to  "5"        When  I  request  "/examples/_002_minimal/math/multiply/{n1}/{n2}"        And  the  response  is  JSON        And  the  response  has  a  "result"  property        And  the  "result"  property  equals  50 Savoury pickled cucumber
  • 21. WHAT,WHY AND HOW RECAP ‣ What is RESTful/Pragmatic API ‣ Why it requires documentation and testing ‣ How to do documentation and testing
  • 22. ABOUT ME @_Arul @Luracast