Designing beautiful REST APIs
-
Upload
tomek-cejner -
Category
Technology
-
view
2.296 -
download
1
description
Transcript of Designing beautiful REST APIs
![Page 1: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/1.jpg)
DESIGNING BEAUTIFULREST APIs
@tomekcejner
![Page 2: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/2.jpg)
THE PRESENTER
![Page 3: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/3.jpg)
THE PRESENTERTOMEK [email protected]
![Page 4: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/4.jpg)
THE PRESENTERTOMEK [email protected]
![Page 5: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/5.jpg)
FASHION
![Page 6: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/6.jpg)
WHAT REST MEANS
![Page 7: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/7.jpg)
NO FRAMEWORKS
![Page 8: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/8.jpg)
APPLICATIONS
![Page 9: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/9.jpg)
APPLICATIONSGOING OPEN
![Page 10: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/10.jpg)
APPLICATIONSGOING OPENGOING BIG
![Page 11: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/11.jpg)
SOA
![Page 12: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/12.jpg)
LOOSE COUPLING
![Page 13: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/13.jpg)
LOOSE COUPLINGSMALLER CODEBASE
![Page 14: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/14.jpg)
LOOSE COUPLINGSMALLER CODEBASE
REUSABILITY
![Page 15: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/15.jpg)
WEB SERVICES
![Page 16: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/16.jpg)
![Page 17: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/17.jpg)
WORLDS BIGGEST APP EVER
![Page 18: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/18.jpg)
WORLD WIDE WEB
![Page 19: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/19.jpg)
WHAT IS REST?
![Page 20: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/20.jpg)
A PROTOCOL?
![Page 21: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/21.jpg)
A PROTOCOL?NO
![Page 22: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/22.jpg)
A SPECIFICATION?
![Page 23: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/23.jpg)
A SPECIFICATION?NO
![Page 24: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/24.jpg)
ARCHITECTURAL STYLE
![Page 25: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/25.jpg)
ROY T. FIELDINGPHD DISSERTATION
![Page 26: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/26.jpg)
http://www.w3.org/Protocols/rfc2616/rfc2616.html
![Page 27: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/27.jpg)
![Page 28: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/28.jpg)
BUILDING ARCHITECTURE
![Page 29: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/29.jpg)
BUILDING ARCHITECTUREFROM SCRATCH
![Page 30: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/30.jpg)
BUILDING ARCHITECTUREFROM SCRATCHFROM WHOLE
![Page 31: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/31.jpg)
![Page 32: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/32.jpg)
CONSTRAINTS
![Page 33: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/33.jpg)
CONSTRAINTSCLIENT-SERVER
![Page 34: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/34.jpg)
CONSTRAINTSCLIENT-SERVER
STATELESS
![Page 35: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/35.jpg)
CONSTRAINTSCLIENT-SERVER
STATELESSCACHEABLE
![Page 36: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/36.jpg)
CONSTRAINTSCLIENT-SERVER
STATELESSCACHEABLE
UNIFORM INTERFACE
![Page 37: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/37.jpg)
RESOURCE
![Page 38: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/38.jpg)
URI
http://www.example.com/blogs/423/entries/12340 http://www.example.com/sales/2004/Q4http://www.example.com/bugs/by-state/open
![Page 39: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/39.jpg)
URI
http://api.example.com/places/42.089199,93.076172http://api.example.com/color-blends/yellow;blue
![Page 40: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/40.jpg)
URI
http://api.example.com/items?price_min=0&price_max=599
![Page 41: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/41.jpg)
URI
http://api.example.com/auctions/239841/cancel
![Page 42: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/42.jpg)
URI
http://api.example.com/auctions/239841/cancel
![Page 43: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/43.jpg)
RICHARDSON MATURITY MODEL
http://www.crummy.com/writing/speaking/2008-QCon/act3.html
![Page 44: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/44.jpg)
![Page 45: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/45.jpg)
![Page 46: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/46.jpg)
![Page 47: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/47.jpg)
![Page 48: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/48.jpg)
![Page 49: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/49.jpg)
![Page 50: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/50.jpg)
LEVEL 0
![Page 51: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/51.jpg)
LEVEL 0HELL
![Page 52: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/52.jpg)
POST /auctionServiceAPIEndpoint HTTP/1.1
<query> <params> <name>Macbook Air</name> <price_from>0</price_from> <price_to>1000</price_to> </params></query>
![Page 53: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/53.jpg)
HTTP/1.1 200 OK
<items> <item> <id>123</id> <name>Macbook Air</name>
<price>499</price> <condition>NEW</condition> </item></items>
![Page 54: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/54.jpg)
LEVEL 1
![Page 55: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/55.jpg)
LEVEL 1URI
![Page 56: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/56.jpg)
POST /auctions/1234/read
![Page 57: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/57.jpg)
POST /auctions/1234/readGET /auctions/1234/read
![Page 58: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/58.jpg)
POST /auctions/1234/readGET /auctions/1234/readPOST /auctions/create
![Page 59: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/59.jpg)
POST /auctions/1234/readGET /auctions/1234/readPOST /auctions/createPOST /auctions/1234/update
![Page 60: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/60.jpg)
LEVEL 2HTTP
![Page 61: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/61.jpg)
/auctions
![Page 62: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/62.jpg)
/auctions/auctions/1234
![Page 63: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/63.jpg)
GET
![Page 64: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/64.jpg)
GETPOST
![Page 65: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/65.jpg)
GETPOSTPUT
![Page 66: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/66.jpg)
GETPOSTPUT
DELETE
![Page 67: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/67.jpg)
GETPOSTPUT
DELETEHEAD
![Page 68: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/68.jpg)
GETPOSTPUT
DELETEHEAD
OPTIONS
![Page 69: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/69.jpg)
GETPOSTPUT
DELETEHEAD
OPTIONSPATCH
![Page 70: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/70.jpg)
GET
![Page 71: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/71.jpg)
![Page 72: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/72.jpg)
GET /auctions
![Page 73: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/73.jpg)
GET /auctionsGET /auctions/1234
![Page 74: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/74.jpg)
GET /auctionsGET /auctions/1234GET /auctions?search=Macbook+Air
![Page 75: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/75.jpg)
SAFE + IDEMPOTENT
![Page 76: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/76.jpg)
![Page 77: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/77.jpg)
TESLA MODEL SIT HAS A RESTFUL API
![Page 78: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/78.jpg)
![Page 79: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/79.jpg)
GET http://api.flickr.com/services/rest?method=flickr.photos.people.add&api_key=xxx&photo_id=yyy&user_id=zzz
![Page 80: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/80.jpg)
DELETE
![Page 81: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/81.jpg)
DELETE
DELETE /auctions/1234
![Page 82: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/82.jpg)
DELETE
DELETE /auctions/1234
HTTP/1.1 204 No Content
![Page 83: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/83.jpg)
DON’T DO THIS AT HOME
![Page 84: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/84.jpg)
DELETE
![Page 85: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/85.jpg)
DELETEIDEMPOTENT
![Page 86: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/86.jpg)
DELETEIDEMPOTENT
NOT SAFE
![Page 87: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/87.jpg)
POST
![Page 88: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/88.jpg)
POST /items{! "name" : "Macbook Air 2010",! "condition" : "NEW",! "price" : 499}
![Page 89: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/89.jpg)
POST /items{! "name" : "Macbook Air 2010",! "condition" : "NEW",! "price" : 499}
201 CreatedLocation: http://api.alledrogo.com/items/1235
![Page 90: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/90.jpg)
POST
![Page 91: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/91.jpg)
NOT IDEMPOTENTPOST
![Page 92: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/92.jpg)
NOT IDEMPOTENTNOT SAFE
POST
![Page 93: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/93.jpg)
PUT
![Page 94: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/94.jpg)
PUT /items/1235
{ "name" : "Macbook Air 2010",! "condition" : "LIKE_NEW",! "price" : 498}
![Page 95: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/95.jpg)
PUT /users/joe
{ “first_name” : “Joe”, “last_name” : “Smith”}
![Page 96: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/96.jpg)
PUTIDEMPOTENT
NOT SAFE
![Page 97: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/97.jpg)
POST: ID FROM SERVER
![Page 98: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/98.jpg)
POST: ID FROM SERVERPUT: ID FROM CLIENT
![Page 99: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/99.jpg)
OPTIONS
![Page 100: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/100.jpg)
OPTIONSDISCOVERY
![Page 101: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/101.jpg)
OPTIONS /users HTTP/1.1
...HTTP/1.1 204 No ContentAllow: GET, POST, PUT
![Page 102: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/102.jpg)
/users /users/456
GET
POST
PUT
DELETE
GET ALL GET USER
CREATE NEW -
- UPDATE
DELETE ALL DELETE USER
![Page 103: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/103.jpg)
HTTP STATUS CODES
![Page 104: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/104.jpg)
SUCCESS
![Page 105: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/105.jpg)
SUCCESS200 OK
![Page 106: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/106.jpg)
SUCCESS200 OK201 CREATED
![Page 107: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/107.jpg)
SUCCESS200 OK201 CREATED202 ACCEPTED
![Page 108: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/108.jpg)
SUCCESS200 OK201 CREATED202 ACCEPTED204 NO CONTENT
![Page 109: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/109.jpg)
201 CREATEDPOST /items/1234/bids{! "amount" : 602.99}
201 CreatedLocation: http://api.alledrogo.com/items/1234/bids/100001{! "cap_amount" : 602.99,! "current_bid" : 510,! "winning" : true}
![Page 110: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/110.jpg)
REDIRECT
![Page 111: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/111.jpg)
REDIRECT301 MOVED PERMANENTLY
![Page 112: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/112.jpg)
REDIRECT301 MOVED PERMANENTLY303 SEE OTHER
![Page 113: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/113.jpg)
REDIRECT301 MOVED PERMANENTLY303 SEE OTHER304 NOT MODIFIED
![Page 114: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/114.jpg)
REDIRECT301 MOVED PERMANENTLY303 SEE OTHER304 NOT MODIFIED307 TEMPORARY REDIRECT
![Page 115: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/115.jpg)
USER ERROR
![Page 116: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/116.jpg)
USER ERROR400 BAD REQUEST
![Page 117: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/117.jpg)
USER ERROR400 BAD REQUEST401 UNAUTHORIZED
![Page 118: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/118.jpg)
USER ERROR400 BAD REQUEST401 UNAUTHORIZED403 FORBIDDEN
![Page 120: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/120.jpg)
405 METHOD NOT ALLOWED
![Page 121: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/121.jpg)
409 CONFLICT
![Page 122: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/122.jpg)
410 GONE
![Page 123: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/123.jpg)
SERVER ERROR
![Page 124: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/124.jpg)
SERVER ERROR500 INTERNAL SERVER ERROR
![Page 125: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/125.jpg)
SERVER ERROR500 INTERNAL SERVER ERROR503 SERVICE UNAVAILABLE
![Page 126: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/126.jpg)
DON’T IGNORE HTTP STATUS
![Page 127: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/127.jpg)
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
![Page 128: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/128.jpg)
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
![Page 129: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/129.jpg)
<?xml version="1.0" encoding="utf-8" ?><rsp stat="fail"> <err code="100" msg="Invalid API Key (Key has invalid format)" /></rsp>
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
![Page 130: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/130.jpg)
LEVEL 3
![Page 131: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/131.jpg)
LEVEL 3HYPERMEDIA
![Page 132: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/132.jpg)
LINKING
![Page 133: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/133.jpg)
![Page 134: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/134.jpg)
SELF DESCRIBED CAPABILITIES
INTERCONNECTION
![Page 135: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/135.jpg)
PRESENTATIONXHTML
XMLATOM
...
![Page 136: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/136.jpg)
GET /items?q=macbook+air+new{! "results" : [! ! {! ! ! "id" : 1234,! ! ! "name" : "Macbook Air 2010 LIKE NEW",! ! ! "price" : "499"! ! }! ]}
NO HYPERMEDIA
![Page 137: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/137.jpg)
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"! ! }! ]}
WITH HYPERMEDIA
![Page 138: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/138.jpg)
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"}
![Page 139: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/139.jpg)
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"}
![Page 140: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/140.jpg)
POST /items/1234/bids{! "amount" : 602.99}
![Page 141: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/141.jpg)
POST /items/1234/bids{! "amount" : 602.99}
201 CreatedLocation: 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}
![Page 142: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/142.jpg)
DOMAIN APPLICATION PROTOCOL
![Page 143: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/143.jpg)
HATEOAS
![Page 144: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/144.jpg)
HATEOASHYPERMEDIA
![Page 145: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/145.jpg)
HATEOASHYPERMEDIA
AS
![Page 146: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/146.jpg)
HATEOASHYPERMEDIA
ASTHE ENGINE
![Page 147: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/147.jpg)
HATEOASHYPERMEDIA
ASTHE ENGINE
OF APPLICATION STATE
![Page 148: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/148.jpg)
IN PRACTICE
![Page 149: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/149.jpg)
AUCTION SERVICE - USERS
![Page 150: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/150.jpg)
AUCTION SERVICE - USERS
doGetMyDatadoGetUserIDdoGetUserItemsdoShowUserdoShowUserPage
![Page 151: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/151.jpg)
AUCTION SERVICE - USERS
doGetMyDatadoGetUserIDdoGetUserItemsdoShowUserdoShowUserPage
GET /users/meGET /users?name=czesioGET /users/123456/itemsGET /users/123456/detailsGET /users/123456/aboutpage
![Page 152: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/152.jpg)
AUCTION SERVICE - MY AUCTIONS
![Page 153: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/153.jpg)
AUCTION SERVICE - MY AUCTIONS
doGetFavouriteCategoriesdoGetFavouriteSellersdoGetMyBidItemsdoGetMyWatchItems doGetMySoldItemsdoRemoveFromWatchList
![Page 154: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/154.jpg)
AUCTION SERVICE - MY AUCTIONS
doGetFavouriteCategoriesdoGetFavouriteSellersdoGetMyBidItemsdoGetMyWatchItems doGetMySoldItemsdoRemoveFromWatchList
GET /users/me/favorites/categoryGET /users/me/favorites/sellersGET /users/me/bidsGET /users/me/items/watchingGET /users/me/items/soldDELETE /users/me/items/watching/1
![Page 155: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/155.jpg)
AUCTION SERVICE - BIDDING
![Page 156: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/156.jpg)
AUCTION SERVICE - BIDDING
doBidItemdoRequestCancelBid
![Page 157: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/157.jpg)
AUCTION SERVICE - BIDDING
doBidItemdoRequestCancelBid
POST /items/54321/bidsDELETE /items/54321/bids/678
![Page 158: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/158.jpg)
BEYOND CRUD
![Page 159: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/159.jpg)
COPYGET /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}
![Page 160: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/160.jpg)
COPY
POST /items/5001/duplicate;t=37489231614874
HTTP/1.1 201 CreatedLocation: /items/5002
![Page 161: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/161.jpg)
SNAPSHOT
PUT /items/5002
{ “name” : “MacBook Air”, “price” : 399}
HTTP/1.1 204 No Content
![Page 162: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/162.jpg)
SNAPSHOTGET /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}
![Page 163: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/163.jpg)
UNDO
POST /items/5002/undo;t=92312093
HTTP/1.1 303 See OtherLocation: /items/5002
![Page 164: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/164.jpg)
ASYNCHRONOUS OPERATION
![Page 165: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/165.jpg)
ASYNCHRONOUS OPERATIONPOST /projects/123/tasks{ “type” : “REPORT”, “date_from” : “20130101”, “date_to” : “20130331”}
![Page 166: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/166.jpg)
ASYNCHRONOUS OPERATIONPOST /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” }, ]}
![Page 167: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/167.jpg)
MEDIA TYPES
![Page 168: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/168.jpg)
MEDIA TYPES
Content-Type: application/vnd.alledrogo+xml
![Page 169: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/169.jpg)
MEDIA TYPES
Content-Type: application/vnd.alledrogo+xmlContent-Type: text/html
![Page 170: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/170.jpg)
REST VS SOAP/RPC
![Page 171: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/171.jpg)
REST VS SOAP/RPCCOMPLEMENT, NOT CONCURRENT
![Page 172: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/172.jpg)
NATURE OF THE WEB
![Page 173: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/173.jpg)
CALL IT REST
![Page 174: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/174.jpg)
CALL IT RESTWHEN DOING IT REST
![Page 175: Designing beautiful REST APIs](https://reader033.fdocuments.us/reader033/viewer/2022051412/54b514424a7959202e8b463a/html5/thumbnails/175.jpg)
THANK YOU!