SlideShare a Scribd company logo
1 of 22
Download to read offline
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

More Related Content

More from Arul Kumaran

Accelerating Xamarin Development
Accelerating Xamarin DevelopmentAccelerating Xamarin Development
Accelerating Xamarin DevelopmentArul Kumaran
 
iOS Native Development with Xamarin
iOS Native Development with XamariniOS Native Development with Xamarin
iOS Native Development with XamarinArul Kumaran
 
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!Arul Kumaran
 
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 AndroidArul Kumaran
 
UI Interactions Testing with FlexMonkey
UI Interactions Testing with FlexMonkeyUI Interactions Testing with FlexMonkey
UI Interactions Testing with FlexMonkeyArul Kumaran
 
Flex Production Tips & Techniques
Flex Production Tips & TechniquesFlex Production Tips & Techniques
Flex Production Tips & TechniquesArul Kumaran
 

More from 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
 

Recently uploaded

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 

Recently uploaded (20)

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 

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