SlideShare a Scribd company logo
DESIGNING BEAUTIFUL
     REST APIs
      @tomekcejner
THE PRESENTER
THE PRESENTER
   TOMEK CEJNER
    @tomekcejner
   www.japko.net
  tomek@japko.net
THE PRESENTER
   TOMEK CEJNER
    @tomekcejner
   www.japko.net
  tomek@japko.net
FASHION
WHAT REST MEANS
NO FRAMEWORKS
APPLICATIONS
APPLICATIONS
 GOING OPEN
APPLICATIONS
 GOING OPEN
  GOING BIG
SOA
LOOSE COUPLING
LOOSE COUPLING
SMALLER CODEBASE
LOOSE COUPLING
SMALLER CODEBASE
   REUSABILITY
WEB SERVICES
WORLDS BIGGEST APP EVER
WORLD WIDE WEB
WHAT IS REST?
A PROTOCOL?
A PROTOCOL?
    NO
A SPECIFICATION?
A SPECIFICATION?
       NO
ARCHITECTURAL STYLE
ROY T. FIELDING
PHD DISSERTATION
http://www.w3.org/Protocols/rfc2616/rfc2616.html
BUILDING ARCHITECTURE
BUILDING ARCHITECTURE
    FROM SCRATCH
BUILDING ARCHITECTURE
    FROM SCRATCH
     FROM WHOLE
CONSTRAINTS
CONSTRAINTS
CLIENT-SERVER
CONSTRAINTS
CLIENT-SERVER
  STATELESS
CONSTRAINTS
CLIENT-SERVER
  STATELESS
  CACHEABLE
CONSTRAINTS
  CLIENT-SERVER
    STATELESS
    CACHEABLE
UNIFORM INTERFACE
RESOURCE
URI

http://www.example.com/blogs/423/entries/12340
http://www.example.com/sales/2004/Q4
http://www.example.com/bugs/by-state/open
URI


http://api.example.com/places/42.089199,93.076172
http://api.example.com/color-blends/yellow;blue
URI


http://api.example.com/items?price_min=0&price_max=599
URI


http://api.example.com/auctions/239841/cancel
URI


http://api.example.com/auctions/239841/cancel
RICHARDSON MATURITY MODEL


   http://www.crummy.com/writing/speaking/2008-QCon/act3.html
LEVEL 0
LEVEL 0
 HELL
POST /auctionServiceAPIEndpoint HTTP/1.1

<query>
  <params>
    <name>Macbook Air</name>
    <price_from>0</price_from>
    <price_to>1000</price_to>
  </params>
</query>
HTTP/1.1 200 OK

<items>
   <item>
      <id>123</id>
      <name>Macbook Air</name>
      <price>499</price>
      <condition>NEW</condition>
   </item>
</items>
LEVEL 1
LEVEL 1
  URI
POST /auctions/1234/read
POST /auctions/1234/read
GET /auctions/1234/read
POST /auctions/1234/read
GET /auctions/1234/read
POST /auctions/create
POST /auctions/1234/read
GET /auctions/1234/read
POST /auctions/create
POST /auctions/1234/update
LEVEL 2
 HTTP
/auctions
/auctions
/auctions/1234
GET
GET
POST
GET
POST
PUT
GET
 POST
 PUT
DELETE
GET
 POST
  PUT
DELETE
 HEAD
GET
  POST
   PUT
 DELETE
  HEAD
OPTIONS
GET
  POST
   PUT
 DELETE
  HEAD
OPTIONS
 PATCH
GET
GET /auctions
GET /auctions
GET /auctions/1234
GET /auctions
GET /auctions/1234
GET /auctions?search=Macbook+Air
SAFE + IDEMPOTENT
TESLA MODEL S
IT HAS A RESTFUL API
GET http://api.flickr.com/services/rest?
method=flickr.photos.people.add&api_key=xxx&photo_id=yyy&user
_id=zzz
DELETE
DELETE

DELETE /auctions/1234
DELETE

DELETE /auctions/1234

HTTP/1.1 204 No Content
DON’T DO THIS AT HOME
DELETE
DELETE
IDEMPOTENT
DELETE
IDEMPOTENT
  NOT SAFE
POST
POST /items
{
! "name" : "Macbook Air 2010",
! "condition" : "NEW",
! "price" : 499
}
POST /items
{
! "name" : "Macbook Air 2010",
! "condition" : "NEW",
! "price" : 499
}




201 Created
Location: http://api.alledrogo.com/items/1235
POST
POST
NOT IDEMPOTENT
POST
NOT IDEMPOTENT
   NOT SAFE
PUT
PUT /items/1235

{
  "name" : "Macbook Air 2010",
! "condition" : "LIKE_NEW",
! "price" : 498
}
PUT /users/joe

{
    “first_name” : “Joe”,
    “last_name” : “Smith”
}
PUT
IDEMPOTENT
  NOT SAFE
POST: ID FROM SERVER
POST: ID FROM SERVER
 PUT: ID FROM CLIENT
OPTIONS
OPTIONS
DISCOVERY
OPTIONS /users HTTP/1.1

...
HTTP/1.1 204 No Content
Allow: GET, POST, PUT
/users      /users/456


 GET      GET ALL      GET USER
POST     CREATE NEW        -
 PUT         -          UPDATE
DELETE   DELETE ALL   DELETE USER
HTTP STATUS CODES
SUCCESS
SUCCESS
200 OK
SUCCESS
200 OK
201 CREATED
SUCCESS
200 OK
201 CREATED
202 ACCEPTED
SUCCESS
200 OK
201 CREATED
202 ACCEPTED
204 NO CONTENT
201 CREATED
POST /items/1234/bids
{
! "amount" : 602.99
}



201 Created
Location: http://api.alledrogo.com/items/1234/bids/100001
{
! "cap_amount" : 602.99,
! "current_bid" : 510,
! "winning" : true
}
REDIRECT
REDIRECT
301 MOVED PERMANENTLY
REDIRECT
301 MOVED PERMANENTLY
303 SEE OTHER
REDIRECT
301 MOVED PERMANENTLY
303 SEE OTHER
304 NOT MODIFIED
REDIRECT
301 MOVED PERMANENTLY
303 SEE OTHER
304 NOT MODIFIED
307 TEMPORARY REDIRECT
USER ERROR
USER ERROR
400 BAD REQUEST
USER ERROR
400 BAD REQUEST
401 UNAUTHORIZED
USER ERROR
400 BAD REQUEST
401 UNAUTHORIZED
403 FORBIDDEN
http://cropp.com/404
405 METHOD NOT ALLOWED
409 CONFLICT
410 GONE
SERVER ERROR
SERVER ERROR
500 INTERNAL SERVER ERROR
SERVER ERROR
500 INTERNAL SERVER ERROR
503 SERVICE UNAVAILABLE
DON’T IGNORE HTTP STATUS
DON’T IGNORE HTTP STATUS
http://api.flickr.com/services/rest?
method=flickr.photos.people.add&api_key=xxx&photo_id=yyy&user_id=zzz
DON’T IGNORE HTTP STATUS
http://api.flickr.com/services/rest?
method=flickr.photos.people.add&api_key=xxx&photo_id=yyy&user_id=zzz




HTTP/200 OK
DON’T IGNORE HTTP STATUS
http://api.flickr.com/services/rest?
method=flickr.photos.people.add&api_key=xxx&photo_id=yyy&user_id=zzz




HTTP/200 OK




<?xml version="1.0" encoding="utf-8" ?>
<rsp stat="fail">
    <err code="100" msg="Invalid API Key (Key has invalid format)" />
</rsp>
LEVEL 3
LEVEL 3
HYPERMEDIA
LINKING
SELF DESCRIBED
  CAPABILITIES
INTERCONNECTION
PRESENTATION
   XHTML
     XML
    ATOM
      ...
NO HYPERMEDIA
GET   /items?q=macbook+air+new
{
!     "results" : [
!     !   {
!     !   !   "id" : 1234,
!     !   !   "name" : "Macbook Air 2010 LIKE NEW",
!     !   !   "price" : "499"
!     !   }
!     ]
}
WITH HYPERMEDIA
GET   /items?q=macbook+air+new
{
!     "results" : [
!     !   {
!     !   !   "_links" : [
!     !   !   !    { "rel" : "self", "uri" : "/items/1234" },
!     !   !   !    { "rel" : "bids", "uri" : "/items/1234/bids" },
!     !   !   !    { "rel" : "highest_bid", "uri" : "/items/1234/bids?q=winning" }
!     !   !   ],
!     !   !   "name" : "Macbook Air 2010 LIKE NEW",
!     !   !   "price" : "499"
!     !   }
!     ]
}
GET   /items/1234
{
!     "_links" : [
!     !   { "rel" : "self", "uri" : "/items/1234" },
!     !   { "rel" : "bids", "uri" : "/items/1234/bids"},
!     !   { "rel" : "seller", "uri" : "/users/9876"}
!     ],
!     "name" : "Macbook Air 2010 LIKE NEW",
!     "price" : "499"
}
GET   /users/9876
{
!     "_links" : [
!     !   { "rel" : "self", "uri" : "/users/9876" },
!     !   { "rel" : "ratings", "uri" : "/users/9876/ratings" }
!     !   { "rel" : "messages", "uri" : "/users/9876/messages" }
!     !   { "rel" : "listings", "uri" : "/users/9876/listings" }
!     ],
!     "name" : "John Doe"
}
POST /items/1234/bids
{
!   "amount" : 602.99
}
POST /items/1234/bids
{
!   "amount" : 602.99
}




201 Created
Location: http://api.alledrogo.com/items/1234/bids/100001
{
!   "_links" : [
!   !   { "rel" : "self", "uri" : "/items/1234/bids/100001" },
!   !   { "rel" : "item", "uri" : "/items/1234" },
!   ]
!   "cap_amount" : 602.99,
!   "current_bid" : 510,
!   "winning" : true
}
DOMAIN APPLICATION PROTOCOL
HATEOAS
HATEOAS
HYPERMEDIA
HATEOAS
HYPERMEDIA
    AS
HATEOAS
HYPERMEDIA
    AS
THE ENGINE
HATEOAS
    HYPERMEDIA
         AS
     THE ENGINE
OF APPLICATION STATE
IN PRACTICE
AUCTION SERVICE - USERS
AUCTION SERVICE - USERS

doGetMyData
doGetUserID
doGetUserItems
doShowUser
doShowUserPage
AUCTION SERVICE - USERS

doGetMyData            GET   /users/me
doGetUserID            GET   /users?name=czesio
doGetUserItems         GET   /users/123456/items
doShowUser             GET   /users/123456/details
doShowUserPage         GET   /users/123456/aboutpage
AUCTION SERVICE - MY AUCTIONS
AUCTION SERVICE - MY AUCTIONS

doGetFavouriteCategories
doGetFavouriteSellers
doGetMyBidItems
doGetMyWatchItems
doGetMySoldItems
doRemoveFromWatchList
AUCTION SERVICE - MY AUCTIONS

doGetFavouriteCategories   GET /users/me/favorites/category
doGetFavouriteSellers      GET /users/me/favorites/sellers
doGetMyBidItems            GET /users/me/bids
doGetMyWatchItems          GET /users/me/items/watching
doGetMySoldItems           GET /users/me/items/sold
doRemoveFromWatchList      DELETE /users/me/items/watching/1
AUCTION SERVICE - BIDDING
AUCTION SERVICE - BIDDING


doBidItem
doRequestCancelBid
AUCTION SERVICE - BIDDING


doBidItem               POST /items/54321/bids
doRequestCancelBid      DELETE /items/54321/bids/678
BEYOND CRUD
COPY
GET /items/5001

HTTP/1.1 200 OK
{
  “_links” : [
     { “rel” : “self”,
        “href” : “/items/5001”
     },
     { “rel” : “duplicate”,
        “href” : “/items/5001/duplicate;t=37489231614874”
     }
  ],
  “name” : “MacBook Air”,
  “price” : 599
}
COPY

POST /items/5001/duplicate;t=37489231614874

HTTP/1.1 201 Created
Location: /items/5002
SNAPSHOT
PUT /items/5002

{
    “name” : “MacBook Air”,
    “price” : 399
}

HTTP/1.1 204 No Content
SNAPSHOT
GET /items/5002

{
    “_links” : [
      { “rel” : “self”,
         “href” : “/items/5002”
      },
      { “rel” : “duplicate”,
         “href” : “/items/5002/duplicate;t=98435943498”
      },
      { “rel” : “previous”,
         “href” : “/items/5002/s1”
      },
      { “rel” : “undo”,
         “href” : “/items/5002/undo;t=92312093”
      },

    ],
    “name” : “MacBook Air”,
    “price” : 599
}
UNDO

POST /items/5002/undo;t=92312093

HTTP/1.1 303 See Other
Location: /items/5002
ASYNCHRONOUS OPERATION
ASYNCHRONOUS OPERATION
POST /projects/123/tasks
{
   “type” : “REPORT”,
   “date_from” : “20130101”,
   “date_to” : “20130331”
}
ASYNCHRONOUS OPERATION
POST /projects/123/tasks
{
   “type” : “REPORT”,
   “date_from” : “20130101”,
   “date_to” : “20130331”
}

HTTP/1.1 202 Accepted
{
   “state” : “PENDING”,
   “ping-after” : “2013-04-12T17:02:32Z”
   “_links” : [
      { “rel” : ”outcome”,
        “href” : “http://api.example.com/reports/882” },
   ]
}
MEDIA TYPES
MEDIA TYPES


Content-Type: application/vnd.alledrogo+xml
MEDIA TYPES


Content-Type: application/vnd.alledrogo+xml
Content-Type: text/html
REST VS SOAP/RPC
REST VS SOAP/RPC
COMPLEMENT, NOT CONCURRENT
NATURE OF THE WEB
CALL IT REST
CALL IT REST
WHEN DOING IT REST
THANK YOU!

More Related Content

What's hot

BDD - Writing better scenario
BDD - Writing better scenarioBDD - Writing better scenario
BDD - Writing better scenarioArnauld Loyer
 
Acceptance Testing with Webrat
Acceptance Testing with WebratAcceptance Testing with Webrat
Acceptance Testing with WebratLuismi Cavallé
 
Crafting Quality PHP Applications: an overview (PHPSW March 2018)
Crafting Quality PHP Applications: an overview (PHPSW March 2018)Crafting Quality PHP Applications: an overview (PHPSW March 2018)
Crafting Quality PHP Applications: an overview (PHPSW March 2018)James Titcumb
 
Maintainable JavaScript 2012
Maintainable JavaScript 2012Maintainable JavaScript 2012
Maintainable JavaScript 2012Nicholas Zakas
 
Crafting Quality PHP Applications (PHPkonf 2018)
Crafting Quality PHP Applications (PHPkonf 2018)Crafting Quality PHP Applications (PHPkonf 2018)
Crafting Quality PHP Applications (PHPkonf 2018)James Titcumb
 
Building iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360FlexBuilding iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360Flexdanielwanja
 
Paul Bunkham at WP-Brighton 2011 - WordPress and eCommerce
Paul Bunkham at WP-Brighton 2011 - WordPress and eCommercePaul Bunkham at WP-Brighton 2011 - WordPress and eCommerce
Paul Bunkham at WP-Brighton 2011 - WordPress and eCommerceWP-Brighton
 
Desafios do Profissionalismo Ágil
Desafios do Profissionalismo ÁgilDesafios do Profissionalismo Ágil
Desafios do Profissionalismo ÁgilVictor Hugo Germano
 
Simple Web Apps With Sinatra
Simple Web Apps With SinatraSimple Web Apps With Sinatra
Simple Web Apps With Sinatraa_l
 
HTML5 - The 2012 of the Web - Adobe MAX
HTML5 - The 2012 of the Web - Adobe MAXHTML5 - The 2012 of the Web - Adobe MAX
HTML5 - The 2012 of the Web - Adobe MAXRobert Nyman
 
HTML5 and CSS3 Shizzle
HTML5 and CSS3 ShizzleHTML5 and CSS3 Shizzle
HTML5 and CSS3 ShizzleChris Mills
 
Progressive Web Apps keynote, Google Developer Summit, Tokyo, Japan
Progressive Web Apps keynote, Google Developer Summit, Tokyo, JapanProgressive Web Apps keynote, Google Developer Summit, Tokyo, Japan
Progressive Web Apps keynote, Google Developer Summit, Tokyo, JapanRobert Nyman
 
Integrating WordPress With Web APIs
Integrating WordPress With Web APIsIntegrating WordPress With Web APIs
Integrating WordPress With Web APIsrandyhoyt
 

What's hot (20)

SlideShare Instant
SlideShare InstantSlideShare Instant
SlideShare Instant
 
BDD - Writing better scenario
BDD - Writing better scenarioBDD - Writing better scenario
BDD - Writing better scenario
 
Acceptance Testing with Webrat
Acceptance Testing with WebratAcceptance Testing with Webrat
Acceptance Testing with Webrat
 
Crafting Quality PHP Applications: an overview (PHPSW March 2018)
Crafting Quality PHP Applications: an overview (PHPSW March 2018)Crafting Quality PHP Applications: an overview (PHPSW March 2018)
Crafting Quality PHP Applications: an overview (PHPSW March 2018)
 
Maintainable JavaScript 2012
Maintainable JavaScript 2012Maintainable JavaScript 2012
Maintainable JavaScript 2012
 
jQuery UI and Plugins
jQuery UI and PluginsjQuery UI and Plugins
jQuery UI and Plugins
 
Crafting Quality PHP Applications (PHPkonf 2018)
Crafting Quality PHP Applications (PHPkonf 2018)Crafting Quality PHP Applications (PHPkonf 2018)
Crafting Quality PHP Applications (PHPkonf 2018)
 
Building iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360FlexBuilding iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360Flex
 
Paul Bunkham at WP-Brighton 2011 - WordPress and eCommerce
Paul Bunkham at WP-Brighton 2011 - WordPress and eCommercePaul Bunkham at WP-Brighton 2011 - WordPress and eCommerce
Paul Bunkham at WP-Brighton 2011 - WordPress and eCommerce
 
Borrador del blog
Borrador del blogBorrador del blog
Borrador del blog
 
Api
ApiApi
Api
 
Desafios do Profissionalismo Ágil
Desafios do Profissionalismo ÁgilDesafios do Profissionalismo Ágil
Desafios do Profissionalismo Ágil
 
Simple Web Apps With Sinatra
Simple Web Apps With SinatraSimple Web Apps With Sinatra
Simple Web Apps With Sinatra
 
Java Script
Java ScriptJava Script
Java Script
 
HTML5 - The 2012 of the Web - Adobe MAX
HTML5 - The 2012 of the Web - Adobe MAXHTML5 - The 2012 of the Web - Adobe MAX
HTML5 - The 2012 of the Web - Adobe MAX
 
SocketStream
SocketStreamSocketStream
SocketStream
 
HTML5 and CSS3 Shizzle
HTML5 and CSS3 ShizzleHTML5 and CSS3 Shizzle
HTML5 and CSS3 Shizzle
 
1cst
1cst1cst
1cst
 
Progressive Web Apps keynote, Google Developer Summit, Tokyo, Japan
Progressive Web Apps keynote, Google Developer Summit, Tokyo, JapanProgressive Web Apps keynote, Google Developer Summit, Tokyo, Japan
Progressive Web Apps keynote, Google Developer Summit, Tokyo, Japan
 
Integrating WordPress With Web APIs
Integrating WordPress With Web APIsIntegrating WordPress With Web APIs
Integrating WordPress With Web APIs
 

Viewers also liked

Design Beautiful REST + JSON APIs
Design Beautiful REST + JSON APIsDesign Beautiful REST + JSON APIs
Design Beautiful REST + JSON APIsStormpath
 
Extend your REST API
Extend your REST APIExtend your REST API
Extend your REST APIAlexey Tokar
 
RTBkit 2.0 Roadmap Preview
RTBkit 2.0 Roadmap PreviewRTBkit 2.0 Roadmap Preview
RTBkit 2.0 Roadmap PreviewDatacratic
 
Design Guidelines and Lighting in your Downtowns
Design Guidelines and Lighting in your DowntownsDesign Guidelines and Lighting in your Downtowns
Design Guidelines and Lighting in your DowntownsThe Cecil Group
 
Pragmatic REST: recent trends in API design
Pragmatic REST: recent trends in API designPragmatic REST: recent trends in API design
Pragmatic REST: recent trends in API designMarsh Gardiner
 
Introduction to API Design: REST and Java
Introduction to API Design: REST and JavaIntroduction to API Design: REST and Java
Introduction to API Design: REST and JavaPhilip Johnson
 
Rest API with Swagger and NodeJS
Rest API with Swagger and NodeJSRest API with Swagger and NodeJS
Rest API with Swagger and NodeJSLuigi Saetta
 
Secure rest api on microservices vws2016
Secure rest api on microservices  vws2016Secure rest api on microservices  vws2016
Secure rest api on microservices vws2016Quý Nguyễn Minh
 
Introduction to ACI APIs
Introduction to ACI APIsIntroduction to ACI APIs
Introduction to ACI APIsCisco DevNet
 
Rest api design by george reese
Rest api design by george reeseRest api design by george reese
Rest api design by george reesebuildacloud
 
REST API Recommendations
REST API RecommendationsREST API Recommendations
REST API RecommendationsJeelani Shaik
 
REST and Microservices
REST and MicroservicesREST and Microservices
REST and MicroservicesShaun Abram
 

Viewers also liked (20)

Design Beautiful REST + JSON APIs
Design Beautiful REST + JSON APIsDesign Beautiful REST + JSON APIs
Design Beautiful REST + JSON APIs
 
Extend your REST API
Extend your REST APIExtend your REST API
Extend your REST API
 
RTBkit 2.0 Roadmap Preview
RTBkit 2.0 Roadmap PreviewRTBkit 2.0 Roadmap Preview
RTBkit 2.0 Roadmap Preview
 
Rest api design
Rest api designRest api design
Rest api design
 
Design Guidelines and Lighting in your Downtowns
Design Guidelines and Lighting in your DowntownsDesign Guidelines and Lighting in your Downtowns
Design Guidelines and Lighting in your Downtowns
 
L18 REST API Design
L18 REST API DesignL18 REST API Design
L18 REST API Design
 
REST, RESTful API
REST, RESTful APIREST, RESTful API
REST, RESTful API
 
Api Design
Api DesignApi Design
Api Design
 
Pragmatic REST: recent trends in API design
Pragmatic REST: recent trends in API designPragmatic REST: recent trends in API design
Pragmatic REST: recent trends in API design
 
Introduction to API Design: REST and Java
Introduction to API Design: REST and JavaIntroduction to API Design: REST and Java
Introduction to API Design: REST and Java
 
Coherent REST API design
Coherent REST API designCoherent REST API design
Coherent REST API design
 
REST full API Design
REST full API DesignREST full API Design
REST full API Design
 
Rest API with Swagger and NodeJS
Rest API with Swagger and NodeJSRest API with Swagger and NodeJS
Rest API with Swagger and NodeJS
 
Secure rest api on microservices vws2016
Secure rest api on microservices  vws2016Secure rest api on microservices  vws2016
Secure rest api on microservices vws2016
 
Introduction to ACI APIs
Introduction to ACI APIsIntroduction to ACI APIs
Introduction to ACI APIs
 
Rest api design by george reese
Rest api design by george reeseRest api design by george reese
Rest api design by george reese
 
REST API Design
REST API DesignREST API Design
REST API Design
 
API Design - 3rd Edition
API Design - 3rd EditionAPI Design - 3rd Edition
API Design - 3rd Edition
 
REST API Recommendations
REST API RecommendationsREST API Recommendations
REST API Recommendations
 
REST and Microservices
REST and MicroservicesREST and Microservices
REST and Microservices
 

Similar to Designing beautiful REST APIs

Rest experience-report
Rest experience-reportRest experience-report
Rest experience-reportJim Barritt
 
Building Awesome APIs in Grails
Building Awesome APIs in GrailsBuilding Awesome APIs in Grails
Building Awesome APIs in Grailsclatimer
 
RefCard RESTful API Design
RefCard RESTful API DesignRefCard RESTful API Design
RefCard RESTful API DesignOCTO Technology
 
StirTrek 2018 - Rapid API Development with Sails
StirTrek 2018 - Rapid API Development with SailsStirTrek 2018 - Rapid API Development with Sails
StirTrek 2018 - Rapid API Development with SailsJustin James
 
Api development with rails
Api development with railsApi development with rails
Api development with railsEdwin Cruz
 
OpenTox API introductory presentation
OpenTox API introductory presentationOpenTox API introductory presentation
OpenTox API introductory presentationPantelis Sopasakis
 
Socket applications
Socket applicationsSocket applications
Socket applicationsJoão Moura
 
Diseño y Desarrollo de APIs
Diseño y Desarrollo de APIsDiseño y Desarrollo de APIs
Diseño y Desarrollo de APIsRaúl Neis
 
Crafting Quality PHP Applications (PHP Benelux 2018)
Crafting Quality PHP Applications (PHP Benelux 2018)Crafting Quality PHP Applications (PHP Benelux 2018)
Crafting Quality PHP Applications (PHP Benelux 2018)James Titcumb
 
Spca2014 hillier 3rd party_javascript_libraries
Spca2014 hillier 3rd party_javascript_librariesSpca2014 hillier 3rd party_javascript_libraries
Spca2014 hillier 3rd party_javascript_librariesNCCOMMS
 
Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4DEVCON
 
Real-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @MoldcampReal-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @MoldcampAlexei Gorobets
 
Applications: A Series of States
Applications: A Series of StatesApplications: A Series of States
Applications: A Series of StatesTrek Glowacki
 
Designing and Running a GraphQL API
Designing and Running a GraphQL APIDesigning and Running a GraphQL API
Designing and Running a GraphQL APIAtlassian
 
Behavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using CucumberBehavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using CucumberKMS Technology
 

Similar to Designing beautiful REST APIs (20)

Rest experience-report
Rest experience-reportRest experience-report
Rest experience-report
 
Building Awesome APIs in Grails
Building Awesome APIs in GrailsBuilding Awesome APIs in Grails
Building Awesome APIs in Grails
 
Rack Middleware
Rack MiddlewareRack Middleware
Rack Middleware
 
Ws rest
Ws restWs rest
Ws rest
 
Socket.IO
Socket.IOSocket.IO
Socket.IO
 
RefCard RESTful API Design
RefCard RESTful API DesignRefCard RESTful API Design
RefCard RESTful API Design
 
StirTrek 2018 - Rapid API Development with Sails
StirTrek 2018 - Rapid API Development with SailsStirTrek 2018 - Rapid API Development with Sails
StirTrek 2018 - Rapid API Development with Sails
 
ApacheCon 2005
ApacheCon 2005ApacheCon 2005
ApacheCon 2005
 
Api development with rails
Api development with railsApi development with rails
Api development with rails
 
OpenTox API introductory presentation
OpenTox API introductory presentationOpenTox API introductory presentation
OpenTox API introductory presentation
 
Socket applications
Socket applicationsSocket applications
Socket applications
 
Mashing Up The Guardian
Mashing Up The GuardianMashing Up The Guardian
Mashing Up The Guardian
 
Diseño y Desarrollo de APIs
Diseño y Desarrollo de APIsDiseño y Desarrollo de APIs
Diseño y Desarrollo de APIs
 
Crafting Quality PHP Applications (PHP Benelux 2018)
Crafting Quality PHP Applications (PHP Benelux 2018)Crafting Quality PHP Applications (PHP Benelux 2018)
Crafting Quality PHP Applications (PHP Benelux 2018)
 
Spca2014 hillier 3rd party_javascript_libraries
Spca2014 hillier 3rd party_javascript_librariesSpca2014 hillier 3rd party_javascript_libraries
Spca2014 hillier 3rd party_javascript_libraries
 
Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4
 
Real-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @MoldcampReal-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @Moldcamp
 
Applications: A Series of States
Applications: A Series of StatesApplications: A Series of States
Applications: A Series of States
 
Designing and Running a GraphQL API
Designing and Running a GraphQL APIDesigning and Running a GraphQL API
Designing and Running a GraphQL API
 
Behavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using CucumberBehavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using Cucumber
 

Recently uploaded

Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀DianaGray10
 
Server-Driven User Interface (SDUI) at Priceline
Server-Driven User Interface (SDUI) at PricelineServer-Driven User Interface (SDUI) at Priceline
Server-Driven User Interface (SDUI) at PricelineUXDXConf
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIES VE
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1DianaGray10
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlPeter Udo Diehl
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101vincent683379
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Julian Hyde
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupCatarinaPereira64715
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyJohn Staveley
 
Introduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG EvaluationIntroduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG EvaluationZilliz
 
The architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdfThe architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdfalexjohnson7307
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutesconfluent
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxDavid Michel
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2DianaGray10
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoTAnalytics
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxAbida Shariff
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessUXDXConf
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka DoktorováCzechDreamin
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastUXDXConf
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityScyllaDB
 

Recently uploaded (20)

Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
Server-Driven User Interface (SDUI) at Priceline
Server-Driven User Interface (SDUI) at PricelineServer-Driven User Interface (SDUI) at Priceline
Server-Driven User Interface (SDUI) at Priceline
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
Introduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG EvaluationIntroduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG Evaluation
 
The architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdfThe architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdf
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at Comcast
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 

Designing beautiful REST APIs