69
REST, RESTful API

REST, RESTful API

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: REST, RESTful API

REST, RESTful API

Page 2: REST, RESTful API

API

Page 3: REST, RESTful API

Developers as Customers

Page 4: REST, RESTful API

Make APIs Easy to Learn

Page 5: REST, RESTful API

Design APIs Well

Page 6: REST, RESTful API

Bad designed APIs...

Page 7: REST, RESTful API

/getUser/getAllUsers/findUser/findUserAccounts/deleteUser/changeUserPass...

Page 8: REST, RESTful API

API Consumers

Page 9: REST, RESTful API

API Designers

Page 10: REST, RESTful API

Simplicity

Page 11: REST, RESTful API

REST is your friend

Page 12: REST, RESTful API

Base URLs per each resource

Page 13: REST, RESTful API

Collection

/users

Page 14: REST, RESTful API

Entity

/users/hossein/users/13246

Page 15: REST, RESTful API

HTTP Verbs

Page 16: REST, RESTful API

POST

GET

PUT

DELETE

PATCH...

Page 17: REST, RESTful API

C.R.U.D. Operations

Page 18: REST, RESTful API

C. POST

Page 19: REST, RESTful API

R. GET

Page 20: REST, RESTful API

U. PUT

Page 21: REST, RESTful API

D. DELETE

Page 22: REST, RESTful API

PUT is also used for creating

Page 23: REST, RESTful API

PATH for partial updates

Page 24: REST, RESTful API

Verb

ResourcePOST GET PUT DELETE

/usersNew User List Users ? Delete

Everybody

/users/hossein? Show Hossein :)

Update / Create Hossein

Delete Hossein :(

Page 25: REST, RESTful API

Resources as Nouns

Page 26: REST, RESTful API

Plural Nouns

Page 27: REST, RESTful API

Stop using Verbs

Page 28: REST, RESTful API

Verb

ResourcePOST GET PUT DELETE

/usersNew User List Users ? Delete

Everybody

/users/hossein? Show Hossein :)

Update / Create Hossein

Delete Hossein :(

Page 29: REST, RESTful API

Associations

Page 30: REST, RESTful API

Chaining resources together

Page 31: REST, RESTful API

Chaining resources together

/users/hossein/accounts

Page 32: REST, RESTful API

Nesting too much

Page 33: REST, RESTful API
Page 34: REST, RESTful API

Complexity may arise

Page 35: REST, RESTful API

Keep Base URL Simple

Page 36: REST, RESTful API

?

Query String

Page 37: REST, RESTful API

?

Query String

/users?state=pending

Page 38: REST, RESTful API

Params in Headers

Page 39: REST, RESTful API

Pagination

Page 40: REST, RESTful API

Offset / Limit

Page 41: REST, RESTful API

Page number

Page 42: REST, RESTful API

Start / Count

Page 43: REST, RESTful API

HATEOAS

Page 44: REST, RESTful API

Hypermedia As The Engine Of Application State

Page 45: REST, RESTful API

GET /account/12345

HTTP/1.1 HTTP/1.1 200 OK <?xml version="1.0"?> <account> <account_number>12345</account_number> <balance currency="usd">100.00</balance> <link rel="deposit" href="/account/12345/deposit" /> <link rel="withdraw" href="/account/12345/withdraw" /> <link rel="transfer" href="/account/12345/transfer" /> <link rel="close" href="/account/12345/close" /> </account>

Page 46: REST, RESTful API

GET /account/12345

HTTP/1.1 HTTP/1.1 200 OK <?xml version="1.0"?> <account> <account_number>12345</account_number> <balance currency="usd">-30.00</balance> <link rel="deposit" href="/account/12345/deposit" /></account>

Page 47: REST, RESTful API

Versioning

Page 48: REST, RESTful API

Date

/2014-04-05/...

Page 49: REST, RESTful API

Decimal Point

/v1.0/...

Page 50: REST, RESTful API

In Query String

…?v=1

Page 51: REST, RESTful API

Integer :)

/v1//v2/

Page 52: REST, RESTful API

Leftmost in the URI

Page 53: REST, RESTful API

Header

Page 54: REST, RESTful API

Be Explicit

Page 55: REST, RESTful API

Limiting Entity Fields

Page 56: REST, RESTful API

Limiting Entity Fields

/users:(id,first-name)

Page 57: REST, RESTful API

Limiting Entity Fields

/users?fields=id,first-name

Page 58: REST, RESTful API

Formats(JSON, XML)

Page 59: REST, RESTful API

Header

Content-Type: application/json

Page 60: REST, RESTful API

Extension

/users.json

Page 61: REST, RESTful API

Query String

/users?type=json

Page 62: REST, RESTful API

Error Handling

Page 63: REST, RESTful API

HTTP Status Codes

Page 64: REST, RESTful API

Error Messages

Page 65: REST, RESTful API

Linking to comprehensive explanation

Page 66: REST, RESTful API

Domain

Page 67: REST, RESTful API

Domain

api.example.com

Page 68: REST, RESTful API

Domain

dev.example.com

Page 69: REST, RESTful API

Domain

example.com/api/