SlideShare une entreprise Scribd logo
1  sur  17
REST beyond CRUD
Paulo Sousa
@pagsousa
 Sample REST API for “more than CRUD”
 Examples
 Shopping Cart
 Book printing
Shopping cart
 Create a new cart
 Obtain its contents
 Add an item
 Remove an item
 Empty the cart
 Calculate full charges
 Proceed to checkout
Base URI
 Cart as top level resource
 http://example.org/carts/
Or
 Cart as sub resource of user
 http://example.org/users/{id}/cart
Creating a cart
 Cart as top level resource
POST example.org/carts/
 Would return a new cart resource URI
201 Created
Location: http://example.org/carts/123
 Cart as sub resource of user
 Not necessary, cart is already available
 http://example.org/users/{id}/cart
Obtain the content of the cart
 Issue a GET to the resource
GET /carts/{id}
or
GET /users/{id}/cart
 On begining, would return a representation of the empty cart
200 Ok
{itens: []}
 Otherwise would return the current content of the cart
200 Ok
{itens: [{id:..., qty:...}, ...]}
Add an item
 PUT an updated representation of the entire cart
PUT /carts/{id}
{itens: [{id: ..., qty: ...},{id: ..., qty: ...}]}
Or
 Treat the cart as a collection and POST a new item
POST /carts/{id}/itens
{id: ..., qty: ...}
 Would return the URI of the newly added item
201 Created
Location: http://example.org/carts/123/itens/456
Remove an item
 PUT an updated representation of the entire cart
PUT /carts/{id}
{itens: [{id: ..., qty: ...}]}
Or
 Treat the cart as a collection and DELETE an item
DELETE /carts/{id}/itens/{itemid}
Empty the cart
 PUT an updated representation of the empty cart
PUT /carts/{id}
{itens: []}
Or
 Treat the cart as a collection and DELETE the itens
DELETE /carts/{id}/itens
Calculate full charges
 If the calculation is transitory, just GET the result of the calculation
GET /carts/{id}/fullcharges
or
GET /users/{id}/cart/fullcharges
 Would return
{itens: 100, taxes: 23, shipping: 12, total: 140, currency:
EUR}
 Or an updated shopping cart representation with charges element
{itens: [...], charges: {...}}
 This element should be considered transient and not part of the resource
 Former approach is “better” as it is a separate resource
Calculate full charges (2)
 If charges are to be considered a persistent part part of the
resource
 By doing the calculation you are in fact changing the resource
 i.e., Have side effect, so GET is to be avoided
 POST the request for the calculation,
 e.g.
POST /carts/{cid}
{fullcharges: yes}
 Would return updated shopping cart
{itens: [...], charges: {...}}
Procceed to checkout
 POST an order with the content of the shopping cart?
GET /carts/{id}/as-order
POST /orders
Or
 POST to a check-out controller?
POST /carts/{id}/checkout
or
POST /checkout?cart={id}
or
POST /salesprocess/checkout
Book printing example
 Get a pdf of a book
 Print a book
Book printing example
 Download a pdf representation of a book for
printing at the client
GET /books/{id}?template={tmpl}
Accept: application/pdf
Book printing example
 Print a book (at the server)
POST /books/{id}/print?printer=hp01
 In fact what we want is to order a printing service...
POST /printorders/
{what: “/books/{id}”, quality: ..., ... }
202 Accepted
Location: /printorders/3Af42X
Not very
beatiful
Book printing example
 Query the status
GET /printorders/{id}
200 Ok
{status = “pending”, ...}
Book printing example
 Cancel the printing order
DELETE /printorders/{id}
200 Ok
 If the order could not be deleted anymore
(e.g., already printing), the service would
return a 405 Method Not Allowed

Contenu connexe

En vedette (7)

Benefits of Hypermedia API
Benefits of Hypermedia APIBenefits of Hypermedia API
Benefits of Hypermedia API
 
Decoupled Communication
Decoupled CommunicationDecoupled Communication
Decoupled Communication
 
Communication
CommunicationCommunication
Communication
 
Principles of Service Orientation
Principles of Service OrientationPrinciples of Service Orientation
Principles of Service Orientation
 
Design Patterns: From STUPID to SOLID code
Design Patterns: From STUPID to SOLID codeDesign Patterns: From STUPID to SOLID code
Design Patterns: From STUPID to SOLID code
 
Modern web architectural patterns
Modern web architectural patternsModern web architectural patterns
Modern web architectural patterns
 
Patterns of Enterprise Application Architecture (by example)
Patterns of Enterprise Application Architecture (by example)Patterns of Enterprise Application Architecture (by example)
Patterns of Enterprise Application Architecture (by example)
 

Plus de Paulo Gandra de Sousa (9)

Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Minds-on DDD
Minds-on DDDMinds-on DDD
Minds-on DDD
 
Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservices
 
Design Patterns: Back to Basics
Design Patterns: Back to BasicsDesign Patterns: Back to Basics
Design Patterns: Back to Basics
 
Hypermedia APIs
Hypermedia APIsHypermedia APIs
Hypermedia APIs
 
Revision control with Mercurial
Revision control with MercurialRevision control with Mercurial
Revision control with Mercurial
 
Documenting Software Architectures
Documenting Software ArchitecturesDocumenting Software Architectures
Documenting Software Architectures
 
models of distributed computing
models of distributed computingmodels of distributed computing
models of distributed computing
 
Distributed Systems
Distributed SystemsDistributed Systems
Distributed Systems
 

Dernier

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Dernier (20)

HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
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
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

REST beyond CRUD

  • 1. REST beyond CRUD Paulo Sousa @pagsousa
  • 2.  Sample REST API for “more than CRUD”  Examples  Shopping Cart  Book printing
  • 3. Shopping cart  Create a new cart  Obtain its contents  Add an item  Remove an item  Empty the cart  Calculate full charges  Proceed to checkout
  • 4. Base URI  Cart as top level resource  http://example.org/carts/ Or  Cart as sub resource of user  http://example.org/users/{id}/cart
  • 5. Creating a cart  Cart as top level resource POST example.org/carts/  Would return a new cart resource URI 201 Created Location: http://example.org/carts/123  Cart as sub resource of user  Not necessary, cart is already available  http://example.org/users/{id}/cart
  • 6. Obtain the content of the cart  Issue a GET to the resource GET /carts/{id} or GET /users/{id}/cart  On begining, would return a representation of the empty cart 200 Ok {itens: []}  Otherwise would return the current content of the cart 200 Ok {itens: [{id:..., qty:...}, ...]}
  • 7. Add an item  PUT an updated representation of the entire cart PUT /carts/{id} {itens: [{id: ..., qty: ...},{id: ..., qty: ...}]} Or  Treat the cart as a collection and POST a new item POST /carts/{id}/itens {id: ..., qty: ...}  Would return the URI of the newly added item 201 Created Location: http://example.org/carts/123/itens/456
  • 8. Remove an item  PUT an updated representation of the entire cart PUT /carts/{id} {itens: [{id: ..., qty: ...}]} Or  Treat the cart as a collection and DELETE an item DELETE /carts/{id}/itens/{itemid}
  • 9. Empty the cart  PUT an updated representation of the empty cart PUT /carts/{id} {itens: []} Or  Treat the cart as a collection and DELETE the itens DELETE /carts/{id}/itens
  • 10. Calculate full charges  If the calculation is transitory, just GET the result of the calculation GET /carts/{id}/fullcharges or GET /users/{id}/cart/fullcharges  Would return {itens: 100, taxes: 23, shipping: 12, total: 140, currency: EUR}  Or an updated shopping cart representation with charges element {itens: [...], charges: {...}}  This element should be considered transient and not part of the resource  Former approach is “better” as it is a separate resource
  • 11. Calculate full charges (2)  If charges are to be considered a persistent part part of the resource  By doing the calculation you are in fact changing the resource  i.e., Have side effect, so GET is to be avoided  POST the request for the calculation,  e.g. POST /carts/{cid} {fullcharges: yes}  Would return updated shopping cart {itens: [...], charges: {...}}
  • 12. Procceed to checkout  POST an order with the content of the shopping cart? GET /carts/{id}/as-order POST /orders Or  POST to a check-out controller? POST /carts/{id}/checkout or POST /checkout?cart={id} or POST /salesprocess/checkout
  • 13. Book printing example  Get a pdf of a book  Print a book
  • 14. Book printing example  Download a pdf representation of a book for printing at the client GET /books/{id}?template={tmpl} Accept: application/pdf
  • 15. Book printing example  Print a book (at the server) POST /books/{id}/print?printer=hp01  In fact what we want is to order a printing service... POST /printorders/ {what: “/books/{id}”, quality: ..., ... } 202 Accepted Location: /printorders/3Af42X Not very beatiful
  • 16. Book printing example  Query the status GET /printorders/{id} 200 Ok {status = “pending”, ...}
  • 17. Book printing example  Cancel the printing order DELETE /printorders/{id} 200 Ok  If the order could not be deleted anymore (e.g., already printing), the service would return a 405 Method Not Allowed