16
REST without PUT

rest without put

Embed Size (px)

Citation preview

Page 1: rest without put

REST without PUT

Page 2: rest without put

REST

REST stands for Representational State Transfer. (It is sometimes spelled "ReST".) It relies on a stateless, client-server, cacheable communications protocol

Page 3: rest without put

Resource“The key abstraction of information in REST is a resource. Any information that can be named can be a resource: a document or image, a temporal service (e.g. "today's weather in Los Angeles"), a collection of other resources, a non-virtual object (e.g. a person), and so on. In other words, any concept that might be the target of an author's hypertext reference must fit within the definition of a resource. A resource is a conceptual mapping to a set of entities, not the entity that corresponds to the mapping at any particular point in time.”

- Roy Fielding’s dissertation.

Page 4: rest without put

Resource

• Examples:

• in a blog domain

• post, comment, image, tag

• in a bank domain

• customer, account

Page 5: rest without put

REST ApiA typical CRUD based Api:

• GET  /posts  

• GET  /posts/:id  

• POST  /posts    

       {  “title”:  “a  simple  post”,  “content”:  “…”}  

• PUT  /posts  

       {“content”:  “new  content”}

Page 6: rest without put

REST ApiA typical CRUD based Api:

• GET  /customer/:id/accounts  

• GET  /customer/:id/accounts/:id  

• POST  /customer/:id/accounts  

         {  “balance”:  x}  

• PUT  /customer/:id/accounts  

       {  “balance”:  y}

Page 7: rest without put

REST ApiTransfer 30$ from account 1 to account 2

initial  state:  

account  11  balance  50$  

account  21  balance  10$  

PUT  /customer/1/accounts/11  

       {  “balance”:  20}  

PUT  /customer/2/accounts/21  

       {  “balance”:  40}

Page 8: rest without put

CRUD REST API - the cons

• Too much conversations between providers and consumers

• Too much internal domain knowledge into client

Page 9: rest without put

problem of PUT

• complex state transitions can lead to synchronous cruddy CRUD

• usually throws away a lot of information that was available at the time the update was triggered

Page 10: rest without put

Resource(revisit)

any concept that might be the target of an author's hypertext reference must fit within the definition of a resource

Page 11: rest without put

Event ResourcePOST  /transactions  

{  from:  “1”,  to:  “2”,  amount:  “20”  }  

POST  /customer_enrolment  

{customer_id:  1,  balance:  10}  

POST  /change_of_addresses  

{customer_id:  1,  address:  “Church  St  511  Richmond  VIC  3000”}

Page 12: rest without put

REST without PUT

• consumers are forced to post new 'nounified' request resources

• make our mutations be first class citizen nouns

Page 13: rest without put

Coarse grained resource API - the pros

• fits perfectly with event sourcing

• CQRS api

• Reification of abstract concept

Page 14: rest without put

Coarse grained resource API - the cons

• not enough variations to support all API consumers

• the API may be difficult to maintain

Page 15: rest without put

key tips• Granularity of resource

• There’s no hard dependency between Resource and Domain model

• Domain driven design applies to the implementation side of things (including API implementation)

• Resources in REST API drive the API design and contract.

Page 16: rest without put

References• http://www.thoughtworks.com/insights/blog/rest-

api-design-resource-modeling

• http://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying

• http://martinfowler.com/eaaDev/EventSourcing.html

• http://martinfowler.com/bliki/CQRS.html