SlideShare una empresa de Scribd logo
1 de 175
Descargar para leer sin conexión
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!

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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
 

Destacado

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
 

Destacado (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 a 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 a 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
 

Último

Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
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 Takeoffsammart93
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
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 FresherRemote DBA Services
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 

Último (20)

Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
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
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
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
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 

Designing beautiful REST APIs