SlideShare une entreprise Scribd logo
1  sur  241
Télécharger pour lire hors ligne
Vladimir Tsukur / Design Engineer & Team Lead @GlobalLogic, Partner @Easyhunt / Frost Digital 
REST 
2014 
Take a REST! 
Theory and Practice
REpresentational State Transfer 
REST 
2 
team & 
tech lead @ 
vladimir tsukur partner @
REpresentational State Transfer 
REST 
3 
architectural elements 
CCCooommmpppooonnneenentntssts 
Connectors 
Data
REpresentational State Transfer 
REST 
GET /hist 
… 
4 
cat http.log | grep GET 
GET /hist 
PUT /doc/1 
… 
cat http.log grep GET 
stdout stdin 
stdout 
∅
«An architectural style is a … set of 
CONSTRAINTS that restricts the roles of 
REpresentational State Transfer 
REST 
5 
architectural elements …» 
Roy T. Fielding, 2000
REpresentational State Transfer 
REST 
REST 
is a style for 
WEB 
6
REpresentational 
REpresentational State Transfer 
REST 
7 
State 
Transfer
REpresentational State Transfer 
REST 
8
REpresentational State Transfer 
REST 
9
REpresentational State Transfer 
REST 
10
REpresentational State Transfer 
REST 
11 
REST ? 
style ?
REpresentational State Transfer 
REST 
12 
«Be of the web, 
not behind the web» 
Ian Robinson
REpresentational State Transfer 
REST 
13 
WWW Requirements 
• Low Entry-barrier 
• Extensibility 
• Distributed Hypermedia 
• Internet-scale 
✓Hypermedia 
✓Prepare for change 
✓Large-grain data transfer 
✓Anarchic scalability 
✓Independent deployment
REpresentational State Transfer 
REST 
14 
REST 
Constraints
REpresentational State Transfer 
REST 
15 
1. Client - Server 
2. Stateless Server 
3. Cache 
4. Uniform Interface 
5. Layered System 
6. [Code-on-Demand]
REpresentational State Transfer 
REST 
16 
1. Client - Server
REpresentational State Transfer 
REST 
17 
1. Client - Server 
POST /hotels/lviv/nobilis/suite-room/booking 
… 
! 
{ 
«from»: «2014-09-10», 
«to»: «2012-09-20», 
«breakfast»: true 
} 
request
REpresentational State Transfer 
REST 
17 
1. Client - Server 
POST /hotels/lviv/nobilis/suite-room/booking 
… 
! 
{ 
«from»: «2014-09-10», 
«to»: «2012-09-20», 
«breakfast»: true 
} 
request 
201 Created 
… 
! 
{ 
«id»: «123», 
«from»: «2014-09-10», 
«to»: … 
} 
response
REpresentational State Transfer 
REST 
18 
1. Client - Server 
Separation of Concerns: 
! 
• Client responsible for UI 
• Server responsible for data storage
REpresentational State Transfer 
REST 
19 
1. Client - Server
REpresentational State Transfer 
REST 
19 
1. Client - Server 
+ Scalability 
+ Simplicity 
+ Evolvability
REpresentational State Transfer 
REST 
20 
2. Stateless Server
REpresentational State Transfer 
REST 
21 
Two Types of State 
• Application State 
!• Resource State
REpresentational State Transfer 
REST 
22 
Application State 
Where you ARE in the 
interaction / session 
Pending Confirmed 
Served 
create 
update 
rejected 
cancel Cancelled 
"live" 
confirmed 
Rejected 
update 
delete
REpresentational State Transfer 
REST 
23 
Resource State 
What is stored on the server 
(beyond session)
REpresentational State Transfer 
REST 
24 
2. Stateless Server 
• Each request contains ALL the 
information necessary to understand it 
! 
• Application (session) state is kept on 
the client
REpresentational State Transfer 
REST 
25 
2. Stateless Server
REpresentational State Transfer 
REST 
25 
2. Stateless Server 
GET /hotels?page request 
{ 
«hotels»: <1..25>, 
«_links»: { 
«next»: «/hotels?page=2» 
} 
} 
response
GET /hotels?page=2 request 
REpresentational State Transfer 
REST 
25 
2. Stateless Server 
GET /hotels?page request 
{ 
«hotels»: <1..25>, 
«_links»: { 
«next»: «/hotels?page=2» 
} 
} 
response 
{ 
«hotels»: <26..50>, 
«_links»: { 
«previous»: «/hotels?page=1», 
«next»: «/hotels?page=3» 
} 
} 
response 
⚡
REpresentational State Transfer 
REST 
26 
2. Stateful Server
REpresentational State Transfer 
REST 
26 
2. Stateful Server 
POST /session request 
response Set-Cookie: JSESSIONID=987
GET /hotels 
Cookie: JSESSIONID=987 request 
REpresentational State Transfer 
REST 
26 
2. Stateful Server 
POST /session request 
response Set-Cookie: JSESSIONID=987 
{ 
«hotels»: <1..25> 
} response
GET /hotels 
Cookie: JSESSIONID=987 request 
GET /hotels/next 
Cookie: JSESSIONID=987 request 
REpresentational State Transfer 
REST 
26 
2. Stateful Server 
POST /session request 
response Set-Cookie: JSESSIONID=987 
{ 
«hotels»: <1..25> 
} response 
{ 
«hotels»: <26..50> 
} response
REpresentational State Transfer 
REST 
27
REpresentational State Transfer 
REST 
28 
Use Cookies for 
Application State? 
ain’t RESTful, sorry!
REpresentational State Transfer 
REST 
29 
2. Stateless Server
REpresentational State Transfer 
REST 
29 
2. Stateless Server 
+ Visibility 
+ Reliability 
+ Scalability
REpresentational State Transfer 
REST 
29 
2. Stateless Server 
+ Visibility 
+ Reliability 
+ Scalability 
- Performance 
- Consistency
REpresentational State Transfer 
REST 
30 
3. Cache
REpresentational State Transfer 
REST 
31 
3. Cache 
• Acts as a mediator between client & 
server potentially reusing responses to 
equivalent requests
REpresentational State Transfer 
REST 
32 
3. Cache
REpresentational State Transfer 
REST 
32 
3. Cache 
GET /hotels request 
200 OK 
Cache-Control: max-age=3600, must-revalidate 
! 
{ 
«hotels»: <1..25>, 
… 
} 
response
REpresentational State Transfer 
REST 
32 
3. Cache 
GET /hotels request 
200 OK 
Cache-Control: max-age=3600, must-revalidate 
! 
{ 
«hotels»: <1..25>, 
… 
} 
response 
request 
cache 
GET /hotels 
200 OK 
Cache-Control: max-age=3600, must-revalidate 
! 
{ 
«hotels»: <1..25>, 
… 
}
REpresentational State Transfer 
REST 
33 
3. Cache
REpresentational State Transfer 
REST 
33 
3. Cache 
+ Efficiency 
+ Scalability 
+ UP Performance
REpresentational State Transfer 
REST 
33 
3. Cache 
+ Efficiency 
+ Scalability 
+ UP Performance 
- Reliability
REpresentational State Transfer 
REST 
34 
Client-Cache - 
Stateless-Server = 
Web < 1994
REpresentational State Transfer 
REST 
35 
Web < 1994 
- Static documents 
- CERN libwww common library 
- No consistent set of semantics 
for all resources
REpresentational State Transfer 
REST 
36
REpresentational State Transfer 
REST 
37 
4. Uniform Interface
REpresentational State Transfer 
REST 
38 
4. Uniform Interface 
1. Identification of resources 
2. Manipulation of resources through 
representations 
3. Self-descriptive messages 
4. HATEOAS
4. Uniform Interface 
REpresentational State Transfer 
REST 
39 
Resource 
is a key abstraction
REpresentational State Transfer 
REST 
40 
/images/beautiful-lviv.jpg
REpresentational State Transfer 
REST 
41 
/images/beautiful-kyiv.jpg
REpresentational State Transfer 
REST 
42 
/documents/folder/profile.doc
REpresentational State Transfer 
REST 
43 
/time/current
REpresentational State Transfer 
REST 
44 
/api/hotels/lviv
REpresentational State Transfer 
REST 
45 
/api/hotels/lviv/nobilis
REpresentational State Transfer 
REST 
46 
/api/hotels/lviv/nobilis/classic
REpresentational State Transfer 
REST 
47 
/abstraction
4. Uniform Interface 
REpresentational State Transfer 
REST 
48 
resource => entity 
! 
entity ≠> resource
4. Uniform Interface 
Resources 
REpresentational State Transfer 
REST 
49 
/v1
4. Uniform Interface 
Resources 
REpresentational State Transfer 
REST 
49 
/v1 /v2
REpresentational State Transfer 
REST 
49 
/v1 
/latest 
/v2 
4. Uniform Interface 
Resources
REpresentational State Transfer 
REST 
49 
/v1 
/v2 /v3 
/latest 
4. Uniform Interface 
Resources
4. Uniform Interface 
Resources 
REpresentational State Transfer 
REST 
49 
/v1 
/v2 /v3 
/latest 
/v2 != /latest 
/v3 != /latest
4. Uniform Interface 
Resources 
REpresentational State Transfer 
REST 
50 
=> {} 
=> static: 
! 
=> dynamic:
4. Uniform Interface 
Resources 
REpresentational State Transfer 
REST 
51 
+ Generality 
+ Allows late binding 
+ Allows to reference 
concept, not singular 
representation
REpresentational State Transfer 
REST 
52 
4. Uniform Interface 
4.1. Identification of Resources
4. Uniform Interface 
4.1. Identification of Resources 
REpresentational State Transfer 
REST 
53 
http://www.google.com 
ftp://user:password@host:port/path 
urn:ISBN:0-395-36341-1
REpresentational State Transfer 
REST 
54 
4. Uniform Interface 
4.2. Manipulation of Resources 
through Representations
4. Uniform Interface 
Content Negotiation = Conneg 
REpresentational State Transfer 
REST 
55 
GET /current-time 
Accept: text/plain request
4. Uniform Interface 
Content Negotiation = Conneg 
REpresentational State Transfer 
REST 
55 
GET /current-time 
Accept: text/plain request 
200 OK 
Content-Type: text/plain 
! 
Thu Aug 30 2014 09:30:15 GMT+0300 (EEST) 
response
4. Uniform Interface 
Conneg 
REpresentational State Transfer 
REST 
56 
GET /current-time 
Accept: text/xml request
4. Uniform Interface 
Conneg 
REpresentational State Transfer 
REST 
56 
GET /current-time 
Accept: text/xml request 
200 OK 
Content-Type: text/xml 
! 
<current-time>1341095876929</current-time> 
response
REpresentational State Transfer 
REST 
57 
GET /current-time 
Accept: text/plain;q=0.8, 
text/xml;q=0.9 
request 
4. Uniform Interface 
Conneg
4. Uniform Interface 
Conneg 
REpresentational State Transfer 
REST 
57 
GET /current-time 
Accept: text/plain;q=0.8, 
text/xml;q=0.9 
request 
200 OK 
Content-Type: text/xml 
! 
<current-time>1341095876929</current-time> 
response
REpresentational State Transfer 
REST 
58 
4. Uniform Interface 
Representation Structure 
200 OK 
Content-Type: text/plain 
Content-Length: 41 
! 
Thu Aug 30 2014 09:30:15 GMT+0300 (EEST)
Metadata 
REpresentational State Transfer 
REST 
58 
4. Uniform Interface 
Representation Structure 
200 OK 
Content-Type: text/plain 
Content-Length: 41 
! 
Thu Aug 30 2014 09:30:15 GMT+0300 (EEST)
Metadata 
REpresentational State Transfer 
REST 
58 
4. Uniform Interface 
Representation Structure 
200 OK 
Content-Type: text/plain 
Content-Length: 41 
! 
Thu Aug 30 2014 09:30:15 GMT+0300 (EEST) 
Data
4. Uniform Interface 
REpresentational State Transfer 
REST 
59 
Content-Type drives 
processing of the payload, 
NOT the payload itself
• = Data Format 
• Intention: 
• Automated processing (JSON, XML) 
• Rendered / viewed by a user (HTML) 
• Both 
• Composite Media Types 
• Affects Latency 
REpresentational State Transfer 
REST 
60 
4. Uniform Interface 
Media Types (Content-Type)
4. Uniform Interface 
Control Data 
• Defines purpose of the message 
GET 
REpresentational State Transfer 
REST 
61 
• Used to parameterize request 
(e.g. caching) 
If-Modified-Since: Sat, 29 Oct 1994 
19:43:31 GMT
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH ⊗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH ⊗ ⊗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH ⊗ ⊗ ⩗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH ⊗ ⊗ ⩗ 
DELETE
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH ⊗ ⊗ ⩗ 
DELETE ⊗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH ⊗ ⊗ ⩗ 
DELETE ⊗ ⩗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH ⊗ ⊗ ⩗ 
DELETE ⊗ ⩗ ⊗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH ⊗ ⊗ ⩗ 
DELETE ⊗ ⩗ ⊗ 
HEAD
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH ⊗ ⊗ ⩗ 
DELETE ⊗ ⩗ ⊗ 
HEAD ⩗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH ⊗ ⊗ ⩗ 
DELETE ⊗ ⩗ ⊗ 
HEAD ⩗ ⩗
REpresentational State Transfer 
REST 
62 
4. Uniform Interface 
safe idempotent cacheable 
GET ⩗ ⩗ ⩗ 
POST ⊗ ⊗ ⩗ 
PUT ⊗ ⩗ ⊗ 
PATCH ⊗ ⊗ ⩗ 
DELETE ⊗ ⩗ ⊗ 
HEAD ⩗ ⩗ ⩗
REpresentational State Transfer 
REST 
63 
4. Uniform Interface 
GET,PUT,POST, 
DELETE 
≠ 
! 
CRUD
REpresentational State Transfer 
REST 
64 
4. Uniform Interface 
REST ≠ CRUD 
• CRUD represent operations on data 
• CRUD pushes business logic to caller
4. Uniform Interface 
REpresentational State Transfer 
REST 
65 
PUT or 
POST 
for Create/Update?
4. Uniform Interface 
REpresentational State Transfer 
REST 
66 
PUT/POST Guidelines 
• Use POST to create a resource identified by 
a service-generated URI 
• Use POST to append a resource to (or to 
update existing resource in) a collection 
identified by a service-generated URI 
• Use PUT to create or update a resource 
identified by a URI received by the client 
sending full content of the specified 
resource
4. Uniform Interface 
REpresentational State Transfer 
REST 
67 
POST 
POST /bookings 
{ 
«room-id»: «lviv:nobilis:suite», 
«data»: { 
«from»: «2014-09-10», 
«to»: «2012-09-20», 
«breakfast»: true 
} 
} 
request 
201 Created 
Location: /bookings/1 
{ 
«id»: «123», 
«room-id»: «lviv:nobilis:suite», 
«data»: … 
} 
response
4. Uniform Interface 
REpresentational State Transfer 
REST 
67 
POST 
POST /bookings 
{ 
«room-id»: «lviv:nobilis:suite», 
«data»: { 
«from»: «2014-09-10», 
«to»: «2012-09-20», 
«breakfast»: true 
} 
} 
request 
201 Created 
Location: /bookings/1 
{ 
«id»: «123», 
«room-id»: «lviv:nobilis:suite», 
«data»: … 
} 
response
4. Uniform Interface 
REpresentational State Transfer 
REST 
67 
POST 
POST /bookings 
{ 
«room-id»: «lviv:nobilis:suite», 
«data»: { 
«from»: «2014-09-10», 
«to»: «2012-09-20», 
«breakfast»: true 
} 
} 
request 
201 Created 
Location: /bookings/1 
{ 
«id»: «123», 
«room-id»: «lviv:nobilis:suite», 
«data»: … 
} 
response
4. Uniform Interface 
REpresentational State Transfer 
REST 
68 
PUT 
PUT /user/mykola/address 
{ 
«street»: «M. Grinchenko», 
«house»: «2/1» 
} 
request 
200 OK / 204 No Content 
{ 
«street»: «M. Grinchenko», 
«house»: «2/1» 
} 
response
4. Uniform Interface 
4.3. Self-descriptive messages 
REpresentational State Transfer 
REST 
69 
Each message includes enough 
information to describe how to process 
the message 
200 OK 
Content-Type: application/json 
Cache-Control: max-age=3600, must-revalidate 
! 
{ 
«hotels»: <1..25>, 
… 
}
4. Uniform Interface 
4.4. HATEOAS 
REpresentational State Transfer 
REST 
70 
Application state transitions fully 
driven by hypermedia
REpresentational State Transfer 
REST 
71 
4. Uniform Interface
REpresentational State Transfer 
REST 
71 
4. Uniform Interface 
+ Simplicity 
+ Visibility 
+ Evolvability
REpresentational State Transfer 
REST 
71 
4. Uniform Interface 
+ Simplicity 
+ Visibility 
+ Evolvability 
- Efficiency
REpresentational State Transfer 
REST 
72 
5. Layered System
REpresentational State Transfer 
REST 
72 
5. Layered System
5. Layered System 
REpresentational State Transfer 
REST 
73 
Each component does not «see» 
beyond the immediate layer 
! 
Intermediaries: 
• Proxies 
• Gateways
REpresentational State Transfer 
REST 
74 
5. Layered System
REpresentational State Transfer 
REST 
74 
5. Layered System 
+ Simplicity 
+ Scalability 
+ Evolvability
REpresentational State Transfer 
REST 
74 
5. Layered System 
+ Simplicity 
+ Scalability 
+ Evolvability 
- UP Performance
REpresentational State Transfer 
REST 
75 
6. [Code-on-Demand]
REpresentational State Transfer 
REST 
76 
6. [Code-on-Demand] 
<!doctype html> 
<html lang="en"> 
<head> 
… 
<script src="path/to/script.js"></script> 
</head> 
… 
</html>
REpresentational State Transfer 
REST 
77 
6. [Code-on-Demand] 
<!doctype html> 
<html lang="en"> 
<head> 
… 
<applet width="200" height="200" 
archive="applet.jar" 
code="com.example.MainClass" /> 
</head> 
… 
</html>
REpresentational State Transfer 
REST 
78 
6. [Code-on-Demand]
REpresentational State Transfer 
REST 
78 
6. [Code-on-Demand] 
+ Client Simplicity 
+ Extensibility
REpresentational State Transfer 
REST 
78 
6. [Code-on-Demand] 
+ Client Simplicity 
+ Extensibility - Visibility
REpresentational State Transfer 
REST 
79 
6. [Code-on-Demand] 
vs
REpresentational State Transfer 
REST 
79 
6. [Code-on-Demand] 
vs 
+ Simplicity 
+ Visibility 
+ UP Performance
REpresentational State Transfer 
REST 
80 
REST
REpresentational State Transfer 
REST 
81 
profit 
+ Performance 
+ Scalability 
+ Simplicity 
+ Evolvability 
+ Visibility 
+ Portability 
…
REpresentational State Transfer 
REST 
82 
Default REST Impl 
• HTTP (RFC 2616, 
RFC 7230-7235) 
• URI (RFC 3986) 
• HTML
REpresentational State Transfer 
REST 
83 
Richardson 
Maturity 
Model
REpresentational State Transfer 
REST 
84 
RMM
REpresentational State Transfer 
REST 
85 
Level 0 - Book 
POST /bookings 
{ 
«createBooking»: { 
«room-id»: «lviv:nobilis:suite», 
«data»: { 
«from»: «2014-09-10», 
«to»: «2012-09-20», 
«breakfast»: true 
} 
} 
} 
request 
200 OK 
{ 
«success»: { 
«id»: «123», 
«room-id»: «lviv:nobilis:suite», 
«data»: … 
} 
} 
response
REpresentational State Transfer 
REST 
86 
Level 0 - Get Booking 
POST /bookings 
{ 
«getBooking»: { 
«id»: «123» 
} 
} 
request 
200 OK 
{ 
«success»: { 
«id»: «123», 
«room-id»: «lviv:nobilis:suite», 
«data»: … 
} 
} 
response
REpresentational State Transfer 
REST 
87 
Level 0 
1. Single URI endpoint 
2. Single HTTP method 
3. Uses HTTP as transport, not app protocol 
4. Does not use mechanics of the Web 
5. Usually based on RPC 
Flickr SOAP API, 
Google AdSense API
REpresentational State Transfer 
REST 
88 
Level 1 - Book 
POST /hotel/lviv/nobilis/suite 
{ 
«createBooking»: { 
«from»: «2014-09-10», 
«to»: «2012-09-20», 
«breakfast»: true 
} 
} 
request 
200 OK 
{ 
«success»: { 
«id»: «123», 
«room-id»: «lviv:nobilis:suite», 
«data»: … 
} 
} 
response
REpresentational State Transfer 
REST 
89 
Level 1 - Get Booking 
POST /bookings/123 
{ 
«getBooking»: { 
«id»: «123» 
} 
} 
request 
200 OK 
{ 
«success»: { 
«id»: «123», 
«room-id»: «lviv:nobilis:suite», 
«data»: … 
} 
} 
response
REpresentational State Transfer 
REST 
90 
Level 1 
1. Multiple resources 
2. Single HTTP method 
3. Action in URI or payload 
Flickr «REST» API, 
Amazon SimpleDB
REpresentational State Transfer 
REST 
91 
Level 2 - Book 
POST /hotel/lviv/nobilis/suite/booking 
{ 
«from»: «2014-09-10», 
«to»: «2012-09-20», 
«breakfast»: true 
} 
request 
200 OK 
{ 
«id»: «123», 
«room-id»: «lviv:nobilis:suite», 
«data»: … 
} 
response
REpresentational State Transfer 
REST 
92 
Level 2 - Get Booking 
GET /bookings/123 
request 
200 OK 
{ 
«id»: «123», 
«room-id»: «lviv:nobilis:suite», 
«data»: … 
} 
response
REpresentational State Transfer 
REST 
93 
Level 2 
1. Many URIs 
2. Many verbs 
3. But NO hypermedia 
Amazon S3 
Twitter API 
Google Calendar API
REpresentational State Transfer 
REST 
94 
Level 2 APIs 
HTTP-based Type 1 HTTP-based Type 2 
Identification of Resources Yes Yes 
Manipulation of Resources through 
Representations Yes Yes 
Self-Descriptive Messages No Yes 
HATEOAS No No 
Examples Twitter API Google Calendar API
REpresentational State Transfer 
REST 
95 
Level 3?
REpresentational State Transfer 
REST 
96 
2 
Hypermedia & 
Media Types
REpresentational State Transfer 
REST 
97
«If the engine of application state (and 
hence the API) is not being driven by 
hypertext, then it cannot be RESTful and 
REpresentational State Transfer 
REST 
98 
cannot be a REST API. Period.» 
Roy T. Fielding, 2008
REpresentational State Transfer 
REST 
99 
HATEOAS
REpresentational State Transfer 
REST 
100 
Browsing 
Follow links 
Change application state 
Move towards your goal
REpresentational State Transfer 
REST 
101 
Take a REST 
https://github.com/flushdia/take-a-REST
{ 
«take-a-rest:hotel»: { 
«href»: «http://localhost:8080/api/hotels/2», 
«mediaType»: «application/hal+json» 
} 
} 
REpresentational State Transfer 
REST 
102 
link 
‣ URI - identifies a resource with which the 
consumer can interact to progress the application 
protocol 
‣ rel - contains semantic markup (=> verb, headers, 
structure of the payload) 
‣ mediaType - format of the payload
REpresentational State Transfer 
REST 
103 
Legal interactions between consumer and a set 
of resources involved in a business process 
Pending Confirmed 
Served 
create 
update 
rejected 
cancel Cancelled 
"live" 
confirmed 
Rejected 
update 
delete 
Domain Application 
Protocol
REpresentational State Transfer 
REST 
104 
Application Lifecycle
REpresentational State Transfer 
REST 
105 
Booking Lifecycle
REpresentational State Transfer 
REST 
106
REpresentational State Transfer 
REST 
107 
CREATED Booking 
Initial Transitions
REpresentational State Transfer 
REST 
108 
CREATED Booking 
payment N/A - to be paid on the spot 
N/A
if (booking.links.has(«payment»)) { 
// draw payment button / UI 
} 
REpresentational State Transfer 
REST 
109 
Client
REpresentational State Transfer 
REST 
110 
HATEOAS client 
does NOT break, 
because it does NOT 
expect link to be 
always available
REpresentational State Transfer 
REST 
111 
CREATED Booking 
service link added - new functionality 
N/A
REpresentational State Transfer 
REST 
112 
Upgraded / new client 
MAY leverage new 
features when updated. 
! 
Existing clients stay intact
REpresentational State Transfer 
REST 
113 
Client may know 
HOW, 
but 
NOT WHEN
«REST doesn’t eliminate the need for a 
clue. What REST does is concentrate that 
need for prior knowledge into readily 
standardizable forms. That is the essential 
distinction between data-oriented and 
REpresentational State Transfer 
REST 
114 
control-oriented integration.» 
Roy T. Fielding, 2008
«... It has value because it is far easier to 
standardize representation and relation 
types than it is to standardize objects 
and object-specific interfaces ...» 
REpresentational State Transfer 
REST 
Roy T. Fielding, 2008 
115
REpresentational State Transfer 
REST 
116 
profit 
• API: explorable & self-documented 
• Client: 
• No URL construction 
• No domain logic replication 
• Less coupling 
• Server: 
• Transparent resource relocation 
• Easier versioning & evolvability
REpresentational State Transfer 
REST 
117 
Is somebody 
hypermedia-ing?
REpresentational State Transfer 
REST 
118
URI Template Contract 
REpresentational State Transfer 
REST 
119 
URL Methods 
/api/bookings GET, POST 
/api/bookings/{id} GET, POST, PUT, DELETE 
/api/hotels GET 
/api/hotels/{id} GET
URI Template Contract 
NOT HATEOAS 
REpresentational State Transfer 
REST 
119 
URL Methods 
/api/bookings GET, POST 
/api/bookings/{id} GET, POST, PUT, DELETE 
/api/hotels GET 
/api/hotels/{id} GET
REpresentational State Transfer 
REST 
120 
URI Template Contract 
- Client is bound to honoring URI 
structure (URIs change!) 
- Exposing more detail about 
implementation then necessary 
- Domain-specific logic duplicated on 
the client-side
REpresentational State Transfer 
REST 
121 
REST 
does NOT care 
about URI values 
/whatever/is/fine/ 
to/be/restful
REpresentational State Transfer 
REST 
122 
Single entry-point 
URI(s) * 
/api 
* (or a limited set of URIs)
REpresentational State Transfer 
REST 
123 
Other stuff 
discovered via 
links
REpresentational State Transfer 
REST 
124 
Extras!
REpresentational State Transfer 
REST 
125 
Resource State
REpresentational State Transfer 
REST 
126 
Resource State 
1. Information belonging to the resource 
2. Links to related resources 
3. Possible transition(s) to a future 
state(s) of the resource
REpresentational State Transfer 
REST 
127 
Resource State 
1. Info belonging to resource
REpresentational State Transfer 
REST 
128 
Resource State 
2. Links to related resources
REpresentational State Transfer 
REST 
129 
Resource State 
3. Possible state transitions
4. Uniform Interface 
REpresentational State Transfer 
REST 
130 
Media Type 
HTTP/1.1 200 OK 
Content-Type: application/json 
… 
! 
{ 
«_links»: …, 
«_embedded»: …, 
«city»: "Kyiv", 
«from»: [ 2014, 10, 1 ], 
«to»: [ 2014, 10, 15 ], 
«hotel»: "Premier Palace", 
«includeBreakfast»: false, 
«paid»: true, 
«price»: 1000, 
«roomType»: "ROOM" 
}
4. Uniform Interface 
HTTP/1.1 200 OK 
Content-Type: application/json 
… 
! 
{ 
«_links»: …, 
«_embedded»: …, 
«city»: "Kyiv", 
«from»: [ 2014, 10, 1 ], 
«to»: [ 2014, 10, 15 ], 
«hotel»: "Premier Palace", 
«includeBreakfast»: false, 
«paid»: true, 
«price»: 1000, 
«roomType»: "ROOM" 
} 
REpresentational State Transfer 
REST 
130 
Media Type 
Should it be interpreted as plain vanilla JSON?
4. Uniform Interface 
REpresentational State Transfer 
REST 
131 
Better Media Type 
HTTP/1.1 200 OK 
Content-Type: application/vnd.take-a-rest.booking+json 
… 
! 
{ 
«_links»: …, 
«_embedded»: …, 
«city»: "Kyiv", 
«from»: [ 2014, 10, 1 ], 
«to»: [ 2014, 10, 15 ], 
«hotel»: "Premier Palace", 
«includeBreakfast»: false, 
«paid»: true, 
«price»: 1000, 
«roomType»: "ROOM" 
}
4. Uniform Interface 
REpresentational State Transfer 
REST 
132 
Media Type Profile 
HTTP/1.1 200 OK 
Content-Type: application/hal+json; profile=take-a-rest:booking 
… 
! 
{ 
«_links»: …, 
«_embedded»: …, 
«city»: "Kyiv", 
«from»: [ 2014, 10, 1 ], 
«to»: [ 2014, 10, 15 ], 
«hotel»: "Premier Palace", 
«includeBreakfast»: false, 
«paid»: true, 
«price»: 1000, 
«roomType»: "ROOM" 
}
4. Uniform Interface 
REpresentational State Transfer 
REST 
133 
Should we give 
each representation 
a media type?
4. Uniform Interface 
REpresentational State Transfer 
REST 
134 
Media Types / 
Representations 
‣ Usually there is NO 1:1 relationship between media 
type and representation 
‣ Usually having one single monolithic media type is 
too bulky 
‣ One media type per application domain context is 
usually OK
«A REST API should spend almost all of its 
descriptive effort in defining the media 
type(s) used for representing resources and 
driving application state, or in defining 
REpresentational State Transfer 
REST 
135 
extended relation names and/or 
hypertext-enabled mark-up for existing 
standard media types.» 
Roy T. Fielding, 2008
REpresentational State Transfer 
REST 
136 
Hypermedia Factors 
Measurement of the level 
of hypermedia support
Hypermedia Factors / Link Support 
<img src="/images/cities/lviv.jpg"> 
REpresentational State Transfer 
REST 
137 
LE = Link Embedded 
HTTP GET
Hypermedia Factors / Link Support 
REpresentational State Transfer 
REST 
138 
LO = Link Outbound 
<a href="/pages/hotels/nobilis-lviv.html"> 
Nobilis Lviv 
</a> 
HTTP GET
Hypermedia Factors / Link Support 
REpresentational State Transfer 
REST 
139 
LT = Templated Queries 
<form method="get" action="/hotels/search"> 
<input name="query" type="text"> 
<input type="submit"> 
</form> 
HTTP GET
LN = Non-Idempotent Updates 
REpresentational State Transfer 
REST 
140 
Hypermedia Factors / Link Support 
<form method="post" action="/bookings"> 
<input name="roomId" type="hidden" value="3"> 
<input name="from" type="text"> 
<input name="to" type="text"> 
<input type="submit"> 
</form> 
HTTP POST
Hypermedia Factors / Link Support 
REpresentational State Transfer 
REST 
141 
LI = Idempotent Updates 
new XmlHttpRequest().open("DELETE", "/bookings/3") 
HTTP PUT, DELETE
Hypermedia Factors / Control Data Support 
REpresentational State Transfer 
REST 
142 
CR = Read Modification 
<xsl:include href=«/newsfeed" 
accept="application/rss" /> 
HTTP Accept-* headers
Hypermedia Factors / Control Data Support 
<form method="post" action=«/bookings" 
enctype="application/x-www-form-urlencoded"> 
<input name="roomId" type="hidden" value="3"> 
<input name="from" type="text"> 
<input name="to" type="text"> 
<input type="submit"> 
</form> 
REpresentational State Transfer 
REST 
143 
CU = Update Modification 
HTTP Content-* headers
Hypermedia Factors / Control Data Support 
<form method="post" action="/bookings"> 
<input name="roomId" type="hidden" value="3"> 
<input name="from" type="text"> 
<input name="to" type="text"> 
<input type="submit"> 
</form> 
REpresentational State Transfer 
REST 
144 
CM = Method Modification 
HTTP GET/PUT/POST/…
Hypermedia Factors / Control Data Support 
<link rel="stylesheet" src="styles.css" /> 
REpresentational State Transfer 
REST 
145 
CL = Link Semantics 
HTTP GET/PUT/POST/…
REpresentational State Transfer 
REST 
146 
Hypermedia Factors 
What about and ?
REpresentational State Transfer 
REST 
HTML XML JSON 
LE ⩗ ⊗ ⊗ 
LO ⩗ ⊗ ⊗ 
LT ⩗ ⊗ ⊗ 
LN ⩗ ⊗ ⊗ 
LI ⊗ ⊗ ⊗ 
CR ⊗ ⊗ ⊗ 
CU ⩗ ⊗ ⊗ 
CM ⩗ ⊗ ⊗ 
CL ⩗ ⊗ ⊗ 
147 
Hypermedia Factors
REpresentational State Transfer 
REST 
JSON-LD JSON API HAL Cj Siren Mason Uber 
LE ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ 
LO ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ 
LT ⊗ ⩗ ⩗ ⩗ ⊗ ⩗ ⩗ 
LN ⊗ ⊗ ⊗ ⩗ ⩗ ⩗ ⩗ 
LI ⊗ ⊗ ⊗ ⩗ ⩗ ⩗ ⩗ 
CR ⊗ ⊗ ⩗ ⊗ ⩗ ⩗ ⩗ 
CU ⊗ ⊗ ⊗ ⊗ ⩗ ⩗ ⩗ 
CM ⊗ ⊗ ⊗ ⊗ ⩗ ⩗ ⩗ 
CL ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ 
148 
JSON-based Media Types
REpresentational State Transfer 
REST 
149 
HAL Overview 
Hypertext Application Language: 
• simple format 
• explorable & discoverable APIs 
• for JSON: 
! application/vnd+json 
• for XML: 
application/vnd+xml
REpresentational State Transfer 
REST 
150 
HAL
REpresentational State Transfer 
REST 
151 
HAL - state
REpresentational State Transfer 
REST 
152 
HAL - links
HAL - embedded resources 
REpresentational State Transfer 
REST 
153
REpresentational State Transfer 
REST 
154 
HAL
REpresentational State Transfer 
REST 
155 
HAL - CURies
REpresentational State Transfer 
REST 
155 
HAL - CURies 
• Resource documentation 
• Link name-spacing
REpresentational State Transfer 
REST 
156 
HAL Language Support 
• Java 
• Spring HATEOAS 
• halbuilder-java 
• halarious 
• HyperExpress-HAL 
• JavaScript 
• Scala, Clojure, Ruby, Python, PHP, Objective 
C, C#, Eiffel, Go, Rust, …
REpresentational State Transfer 
REST 
157 
HAL APIs
REpresentational State Transfer 
REST 
158 
Versioning
REpresentational State Transfer 
REST 
159 
1. Version in URI
REpresentational State Transfer 
REST 
159 
1. Version in URI 
http://www.booking-rest.com/v1/bookings
http://www.booking-rest.com/v1/bookings 
REpresentational State Transfer 
REST 
159 
1. Version in URI 
• /v1/bookings/9111 != /v2/bookings/9111? 
Not necessarily 
• Should client support both /v1 and /v2? 
Maintenance nightmare 
• Should client start constructing URIs then? 
Breaks HATEOAS
REpresentational State Transfer 
REST 
160 
2. Version in Media Type
REpresentational State Transfer 
REST 
160 
2. Version in Media Type 
• Another representation of /bookings/9111? 
Yes! 
• Should client support both /v1 and /v2? 
Client chooses which version to support 
through «Accept» 
• No need to construct URIs 
HATEOAS preserved
application/vnd.booking.v2+json 
application/vnd.booking+json; version=2.0 
REpresentational State Transfer 
REST 
160 
2. Version in Media Type 
• Another representation of /bookings/9111? 
Yes! 
• Should client support both /v1 and /v2? 
Client chooses which version to support 
through «Accept» 
• No need to construct URIs 
HATEOAS preserved
REpresentational State Transfer 
REST 
161 
3. Version in Header
REpresentational State Transfer 
REST 
161 
3. Version in Header 
X-REST-API-Version: 2.0
REpresentational State Transfer 
REST 
161 
3. Version in Header 
X-REST-API-Version: 2.0 
Can be filtered out by proxies or 
intermediaries
REpresentational State Transfer 
REST 
162 
4. Best Advice 
DO NOT VERSION!
REpresentational State Transfer 
REST 
162 
4. Best Advice 
DO NOT VERSION! 
Support backwards compatibility, 
enable discovery
REpresentational State Transfer 
REST 
163 
API Survey 
March 2014 
180+ respondents
Security Usability Can't decide 
REpresentational State Transfer 
REST 
164 
API Survey - Top Priority 
18 % 
38 % 
44 %
JSON XML Other 
REpresentational State Transfer 
REST 
165 
API Survey - Format 
2 % 
48 % 51 %
SOAP CRUD Hypermedia 
REpresentational State Transfer 
REST 
166 
API Survey - Style (Now) 
24 % 
39 % 
38 %
28 % 
21 % 
14 % 
7 % 
REpresentational State Transfer 
REST 
167 
API Survey - Plans to add 
0 % 
Hypermedia SOAP CRUD
References - REST Core 
• http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm 
• https://groups.yahoo.com/neo/groups/rest-discuss/conversations/topics/6735 
• http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven 
• http://www.infoq.com/presentations/The-Counterintuitive-Web 
• http://ruben.verborgh.org/blog/2012/08/24/rest-wheres-my-state/ 
• https://code.google.com/p/implementing-rest/wiki/Video 
• http://channel9.msdn.com/posts/TechTalk-RESTful-Application-Protocols-From-Design-to- 
REpresentational State Transfer 
REST 
168 
Implementation 
• http://www.infoq.com/presentations/qcon-tilkov-rest-intro 
• http://www.infoq.com/presentations/vinoski-rest-serendipity 
• http://bitworking.org/news/373/An-Introduction-to-REST 
• http://vimeo.com/15697358 
• http://www.infoq.com/presentations/vinoski-rpc-convenient-but-flawed 
• https://www.youtube.com/watch?v=llpr5924N7E 
• https://www.youtube.com/watch?v=8Q7GyIBrysA 
• http://steve.vinoski.net/pdf/IEEE-Demystifying_RESTful_Data_Coupling.pdf 
• http://www.crummy.com/writing/speaking/2008-QCon/act3.html 
• http://martinfowler.com/articles/richardsonMaturityModel.html
References - HTTP & URI 
• https://www.mnot.net/blog/2014/06/07/rfc2616_is_dead 
• http://www.ietf.org/rfc/rfc2616.txt 
• http://tools.ietf.org/html/rfc7230 
• http://tools.ietf.org/html/rfc7231 
• http://tools.ietf.org/html/rfc7234 
• https://www.mnot.net/blog/2013/05/15/http_problem 
• https://www.mnot.net/blog/2012/12/04/api-evolution 
• https://www.mnot.net/blog/2012/09/05/patch 
• https://www.mnot.net/blog/2012/06/25/http_api_complexity_model 
• https://www.mnot.net/blog/2012/04/17/profiles 
• https://www.mnot.net/blog/2009/02/18/x- 
• http://tools.ietf.org/html/rfc3986 
• https://tools.ietf.org/html/rfc5789 
• http://tools.ietf.org/html/rfc6570 
REpresentational State Transfer 
REST 
169
References - 
Hypermedia & APIs 
• https://www.mnot.net/blog/2013/06/23/linking_apis 
• http://oredev.org/2010/sessions/hypermedia-apis 
• http://vimeo.com/75106815 
• https://www.innoq.com/blog/st/2012/06/hypermedia-benefits-for-m2m-communication/ 
• http://ws-rest.org/2014/sites/default/files/wsrest2014_submission_12.pdf 
• http://www.infoq.com/news/2014/03/ca-api-survey 
• https://twitter.com/hypermediaapis 
• https://www.youtube.com/watch?v=hdSrT4yjS1g 
• https://www.youtube.com/watch?v=mZ8_QgJ5mbs 
• http://nordsc.com/ext/classification_of_http_based_apis.html 
• http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html 
• https://github.com/mamund/Building-Hypermedia-APIs 
• http://amundsen.com/hypermedia/hfactor/ 
• http://tech.blog.box.com/2013/04/get-developer-hugs-with-rich-error-handling-in-your-api/ 
REpresentational State Transfer 
REST 
170
References - Media Types 
• http://stateless.co/hal_specification.html 
• https://github.com/kevinswiber/siren 
• https://github.com/JornWildt/Mason 
• http://json-ld.org/ 
• http://amundsen.com/media-types/collection/ 
• http://soabits.blogspot.com/2013/12/media-types-for-apis.html 
• http://soabits.blogspot.no/2013/05/the-role-of-media-types-in-restful-web. 
REpresentational State Transfer 
REST 
171 
html 
• http://soabits.blogspot.com/2014/03/modelling-shipment-example-as. 
html 
• http://soabits.blogspot.com/2014/02/representing-issue-tracker-with-mason. 
html 
• https://github.com/mamund/media-types/blob/master/uber-hypermedia. 
asciidoc
References - Versioning 
• https://www.mnot.net/blog/2012/12/04/api-evolution 
• https://www.mnot.net/blog/2012/07/11/header_versioning 
• https://www.mnot.net/blog/2011/10/25/web_api_versioning_smackdown 
• http://www.infoq.com/news/2013/12/api-versioning 
• http://www.infoq.com/articles/Web-Service-Contracts 
• http://www.infoq.com/news/2013/09/versioning-restful-services 
• http://www.infoq.com/news/2010/06/rest-versioning 
• http://www.ebpml.org/blog2/index.php/2013/11/25/understanding-the-costs- 
REpresentational State Transfer 
REST 
172 
of-versioning 
• http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is. 
html 
• http://www.infoq.com/articles/contract-versioning-comp2
REpresentational State Transfer 
REST 
173 
References - Caching 
• https://www.mnot.net/cache_docs/ 
• https://www.mnot.net/blog/2007/05/15/expires_max-age 
• http://tools.ietf.org/html/rfc7232 
• https://devcenter.heroku.com/articles/increasing-application-performance- 
with-http-cache-headers 
• https://devcenter.heroku.com/articles/jax-rs-http-caching
REpresentational State Transfer 
REST 
174 
References - 
Tutorials & Tools 
• https://jax-rs-spec.java.net/ 
• http://www.oracle.com/technetwork/articles/java/jaxrs20-1929352.html 
• http://resteasy.jboss.org/ 
• https://code.google.com/p/siren4j/ 
• http://gotohal.net/ 
• https://www.youtube.com/watch?v=1wEp9yHHtwg 
• https://www.youtube.com/watch?v=sVvL12BnIyQ 
• https://www.youtube.com/watch?v=pCnXy2Hs2Ag 
• https://www.youtube.com/watch?v=_0kmqtWYvaY 
• http://kingsfleet.blogspot.com/2014/02/transparent-patch-support-in-jax-rs-20.html 
• http://spring.io/guides/tutorials/rest/ 
• https://jaxb.java.net/ 
• https://github.com/FasterXML/jackson
REST 
175 
Thanks! 
Questions?

Contenu connexe

Tendances

The glory of REST in Java: Spring HATEOAS, RAML, Temenos IRIS
The glory of REST in Java: Spring HATEOAS, RAML, Temenos IRISThe glory of REST in Java: Spring HATEOAS, RAML, Temenos IRIS
The glory of REST in Java: Spring HATEOAS, RAML, Temenos IRISGeert Pante
 
REST - Representational State Transfer
REST - Representational State TransferREST - Representational State Transfer
REST - Representational State TransferPeter R. Egli
 
Representational State Transfer (REST)
Representational State Transfer (REST)Representational State Transfer (REST)
Representational State Transfer (REST)Abhay Ananda Shukla
 
Overview of RESTful web services
Overview of RESTful web servicesOverview of RESTful web services
Overview of RESTful web servicesnbuddharaju
 
ReST (Representational State Transfer) Explained
ReST (Representational State Transfer) ExplainedReST (Representational State Transfer) Explained
ReST (Representational State Transfer) ExplainedDhananjay Nene
 
Representational State Transfer
Representational State TransferRepresentational State Transfer
Representational State TransferAlexei Skachykhin
 
Restful webservice
Restful webserviceRestful webservice
Restful webserviceDong Ngoc
 
RESTful Architecture
RESTful ArchitectureRESTful Architecture
RESTful ArchitectureKabir Baidya
 
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)Rest - Representational State Transfer (EMC BRDC Internal Tech talk)
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)Rodrigo Senra
 
Rest & RESTful WebServices
Rest & RESTful WebServicesRest & RESTful WebServices
Rest & RESTful WebServicesPrateek Tandon
 
Impact of Restful Web Architecture on Performance and Scalability
Impact of Restful Web Architecture on Performance and ScalabilityImpact of Restful Web Architecture on Performance and Scalability
Impact of Restful Web Architecture on Performance and ScalabilitySanchit Gera
 
REST and RESTful Web Services
REST and RESTful Web ServicesREST and RESTful Web Services
REST and RESTful Web ServicesKasun Madusanke
 
How to build a rest api.pptx
How to build a rest api.pptxHow to build a rest api.pptx
How to build a rest api.pptxHarry Potter
 
Spring HATEOAS
Spring HATEOASSpring HATEOAS
Spring HATEOASYoann Buch
 
The Rest Architectural Style
The Rest Architectural StyleThe Rest Architectural Style
The Rest Architectural StyleRobert Wilson
 
Soap and restful webservice
Soap and restful webserviceSoap and restful webservice
Soap and restful webserviceDong Ngoc
 
Overview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB APIOverview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB APIPankaj Bajaj
 

Tendances (20)

The glory of REST in Java: Spring HATEOAS, RAML, Temenos IRIS
The glory of REST in Java: Spring HATEOAS, RAML, Temenos IRISThe glory of REST in Java: Spring HATEOAS, RAML, Temenos IRIS
The glory of REST in Java: Spring HATEOAS, RAML, Temenos IRIS
 
REST - Representational State Transfer
REST - Representational State TransferREST - Representational State Transfer
REST - Representational State Transfer
 
Representational State Transfer (REST)
Representational State Transfer (REST)Representational State Transfer (REST)
Representational State Transfer (REST)
 
Overview of RESTful web services
Overview of RESTful web servicesOverview of RESTful web services
Overview of RESTful web services
 
ReST (Representational State Transfer) Explained
ReST (Representational State Transfer) ExplainedReST (Representational State Transfer) Explained
ReST (Representational State Transfer) Explained
 
Representational State Transfer
Representational State TransferRepresentational State Transfer
Representational State Transfer
 
Restful webservice
Restful webserviceRestful webservice
Restful webservice
 
Restful web services ppt
Restful web services pptRestful web services ppt
Restful web services ppt
 
RESTful Architecture
RESTful ArchitectureRESTful Architecture
RESTful Architecture
 
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)Rest - Representational State Transfer (EMC BRDC Internal Tech talk)
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)
 
Rest & RESTful WebServices
Rest & RESTful WebServicesRest & RESTful WebServices
Rest & RESTful WebServices
 
RESTEasy
RESTEasyRESTEasy
RESTEasy
 
REST & RESTful Web Services
REST & RESTful Web ServicesREST & RESTful Web Services
REST & RESTful Web Services
 
Impact of Restful Web Architecture on Performance and Scalability
Impact of Restful Web Architecture on Performance and ScalabilityImpact of Restful Web Architecture on Performance and Scalability
Impact of Restful Web Architecture on Performance and Scalability
 
REST and RESTful Web Services
REST and RESTful Web ServicesREST and RESTful Web Services
REST and RESTful Web Services
 
How to build a rest api.pptx
How to build a rest api.pptxHow to build a rest api.pptx
How to build a rest api.pptx
 
Spring HATEOAS
Spring HATEOASSpring HATEOAS
Spring HATEOAS
 
The Rest Architectural Style
The Rest Architectural StyleThe Rest Architectural Style
The Rest Architectural Style
 
Soap and restful webservice
Soap and restful webserviceSoap and restful webservice
Soap and restful webservice
 
Overview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB APIOverview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB API
 

En vedette

Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Yuriy Senko
 
Voltdb: Shard It by V. Torshyn
Voltdb: Shard It by V. TorshynVoltdb: Shard It by V. Torshyn
Voltdb: Shard It by V. Torshynvtors
 
JavaScript in Mobile Development
JavaScript in Mobile DevelopmentJavaScript in Mobile Development
JavaScript in Mobile DevelopmentDima Maleev
 
From Pilot to Product - Morning@Lohika
From Pilot to Product - Morning@LohikaFrom Pilot to Product - Morning@Lohika
From Pilot to Product - Morning@LohikaIvan Verhun
 
Invited Talk - Cyber Security and Open Source
Invited Talk - Cyber Security and Open SourceInvited Talk - Cyber Security and Open Source
Invited Talk - Cyber Security and Open Sourcehack33
 
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsAppsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsdrewz lin
 
Exploiting Llinux Environment
Exploiting Llinux EnvironmentExploiting Llinux Environment
Exploiting Llinux EnvironmentEnrico Scapin
 
Big data analysis in java world
Big data analysis in java worldBig data analysis in java world
Big data analysis in java worldSerg Masyutin
 
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaolaAppsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaoladrewz lin
 
Tweaking performance on high-load projects
Tweaking performance on high-load projectsTweaking performance on high-load projects
Tweaking performance on high-load projectsDmitriy Dumanskiy
 
Хитрости UX-дизайна: ключевые лайфхаки, которые должен знать разработчик
Хитрости UX-дизайна: ключевые лайфхаки, которые должен знать разработчикХитрости UX-дизайна: ключевые лайфхаки, которые должен знать разработчик
Хитрости UX-дизайна: ключевые лайфхаки, которые должен знать разработчикNick Grachov
 
Introduction to real time big data with Apache Spark
Introduction to real time big data with Apache SparkIntroduction to real time big data with Apache Spark
Introduction to real time big data with Apache SparkTaras Matyashovsky
 
Taking the Fear out of WAF
Taking the Fear out of WAFTaking the Fear out of WAF
Taking the Fear out of WAFBrian A. McHenry
 
Packet analysis (Basic)
Packet analysis (Basic)Packet analysis (Basic)
Packet analysis (Basic)Ammar WK
 
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...Oleksiy Panchenko
 

En vedette (20)

Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)
 
Voltdb: Shard It by V. Torshyn
Voltdb: Shard It by V. TorshynVoltdb: Shard It by V. Torshyn
Voltdb: Shard It by V. Torshyn
 
JavaScript in Mobile Development
JavaScript in Mobile DevelopmentJavaScript in Mobile Development
JavaScript in Mobile Development
 
From Pilot to Product - Morning@Lohika
From Pilot to Product - Morning@LohikaFrom Pilot to Product - Morning@Lohika
From Pilot to Product - Morning@Lohika
 
Creation of ideas
Creation of ideasCreation of ideas
Creation of ideas
 
Invited Talk - Cyber Security and Open Source
Invited Talk - Cyber Security and Open SourceInvited Talk - Cyber Security and Open Source
Invited Talk - Cyber Security and Open Source
 
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsAppsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
 
Exploiting Llinux Environment
Exploiting Llinux EnvironmentExploiting Llinux Environment
Exploiting Llinux Environment
 
Big data analysis in java world
Big data analysis in java worldBig data analysis in java world
Big data analysis in java world
 
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaolaAppsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaola
 
Tweaking performance on high-load projects
Tweaking performance on high-load projectsTweaking performance on high-load projects
Tweaking performance on high-load projects
 
Хитрости UX-дизайна: ключевые лайфхаки, которые должен знать разработчик
Хитрости UX-дизайна: ключевые лайфхаки, которые должен знать разработчикХитрости UX-дизайна: ключевые лайфхаки, которые должен знать разработчик
Хитрости UX-дизайна: ключевые лайфхаки, которые должен знать разработчик
 
Death of WAF - GoSec '15
Death of WAF - GoSec '15Death of WAF - GoSec '15
Death of WAF - GoSec '15
 
Boot in Production
Boot in ProductionBoot in Production
Boot in Production
 
Introduction to real time big data with Apache Spark
Introduction to real time big data with Apache SparkIntroduction to real time big data with Apache Spark
Introduction to real time big data with Apache Spark
 
Morning at Lohika
Morning at LohikaMorning at Lohika
Morning at Lohika
 
Taking the Fear out of WAF
Taking the Fear out of WAFTaking the Fear out of WAF
Taking the Fear out of WAF
 
Configuration F5 BIG IP ASM v12
Configuration F5 BIG IP ASM v12Configuration F5 BIG IP ASM v12
Configuration F5 BIG IP ASM v12
 
Packet analysis (Basic)
Packet analysis (Basic)Packet analysis (Basic)
Packet analysis (Basic)
 
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...
 

Similaire à RESTful Title for Technical Document

GraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: ScaleGraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: ScaleNeo4j
 
Drupal As A RESTful Backend For Client Side Applications
Drupal As A RESTful Backend For Client Side ApplicationsDrupal As A RESTful Backend For Client Side Applications
Drupal As A RESTful Backend For Client Side ApplicationsMyplanet Digital
 
Patterns & Practices of Microservices
Patterns & Practices of MicroservicesPatterns & Practices of Microservices
Patterns & Practices of MicroservicesWesley Reisz
 
distributing over the web
distributing over the webdistributing over the web
distributing over the webNicola Baldi
 
Graphs: Fabric of DevOps
Graphs: Fabric of DevOpsGraphs: Fabric of DevOps
Graphs: Fabric of DevOpsNeo4j
 
HTTP/2 Comes to Java: Servlet 4.0 and what it means for the Java/Jakarta EE e...
HTTP/2 Comes to Java: Servlet 4.0 and what it means for the Java/Jakarta EE e...HTTP/2 Comes to Java: Servlet 4.0 and what it means for the Java/Jakarta EE e...
HTTP/2 Comes to Java: Servlet 4.0 and what it means for the Java/Jakarta EE e...Edward Burns
 
Big datadc skyfall_preso_v2
Big datadc skyfall_preso_v2Big datadc skyfall_preso_v2
Big datadc skyfall_preso_v2abramsm
 
Modeling REST API's Behaviour with Text, Graphics or Both?
Modeling REST API's Behaviour with Text, Graphics or Both?Modeling REST API's Behaviour with Text, Graphics or Both?
Modeling REST API's Behaviour with Text, Graphics or Both?Ana Ivanchikj
 
CON5898 What Servlet 4.0 Means To You
CON5898 What Servlet 4.0 Means To YouCON5898 What Servlet 4.0 Means To You
CON5898 What Servlet 4.0 Means To YouEdward Burns
 
The Very Very Latest in Database Development - Oracle Open World 2012
The Very Very Latest in Database Development - Oracle Open World 2012The Very Very Latest in Database Development - Oracle Open World 2012
The Very Very Latest in Database Development - Oracle Open World 2012Lucas Jellema
 
Learn REST API at ASIT
Learn REST API at ASITLearn REST API at ASIT
Learn REST API at ASITASIT
 
The Good, the Bad and the Ugly of Migrating Hundreds of Legacy Applications ...
 The Good, the Bad and the Ugly of Migrating Hundreds of Legacy Applications ... The Good, the Bad and the Ugly of Migrating Hundreds of Legacy Applications ...
The Good, the Bad and the Ugly of Migrating Hundreds of Legacy Applications ...Josef Adersberger
 
Migrating Hundreds of Legacy Applications to Kubernetes - The Good, the Bad, ...
Migrating Hundreds of Legacy Applications to Kubernetes - The Good, the Bad, ...Migrating Hundreds of Legacy Applications to Kubernetes - The Good, the Bad, ...
Migrating Hundreds of Legacy Applications to Kubernetes - The Good, the Bad, ...QAware GmbH
 
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
HTTP/2 Comes to Java - What Servlet 4.0 Means to YouHTTP/2 Comes to Java - What Servlet 4.0 Means to You
HTTP/2 Comes to Java - What Servlet 4.0 Means to YouDavid Delabassee
 
Integration Patterns with WSO2 ESB and WSO2 BPS
Integration Patterns with WSO2 ESB and WSO2 BPS Integration Patterns with WSO2 ESB and WSO2 BPS
Integration Patterns with WSO2 ESB and WSO2 BPS WSO2
 
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011Alessandro Nadalin
 
ReST Vs SOA(P) ... Yawn
ReST Vs SOA(P) ... YawnReST Vs SOA(P) ... Yawn
ReST Vs SOA(P) ... Yawnozten
 
Explore Advanced CA Release Automation Configuration Topics
Explore Advanced CA Release Automation Configuration TopicsExplore Advanced CA Release Automation Configuration Topics
Explore Advanced CA Release Automation Configuration TopicsCA Technologies
 
WordPress REST API v2: Overview & Exploring
WordPress REST API v2: Overview & ExploringWordPress REST API v2: Overview & Exploring
WordPress REST API v2: Overview & ExploringNick Pelton
 

Similaire à RESTful Title for Technical Document (20)

GraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: ScaleGraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: Scale
 
Drupal As A RESTful Backend For Client Side Applications
Drupal As A RESTful Backend For Client Side ApplicationsDrupal As A RESTful Backend For Client Side Applications
Drupal As A RESTful Backend For Client Side Applications
 
Patterns & Practices of Microservices
Patterns & Practices of MicroservicesPatterns & Practices of Microservices
Patterns & Practices of Microservices
 
distributing over the web
distributing over the webdistributing over the web
distributing over the web
 
Graphs: Fabric of DevOps
Graphs: Fabric of DevOpsGraphs: Fabric of DevOps
Graphs: Fabric of DevOps
 
HTTP/2 Comes to Java: Servlet 4.0 and what it means for the Java/Jakarta EE e...
HTTP/2 Comes to Java: Servlet 4.0 and what it means for the Java/Jakarta EE e...HTTP/2 Comes to Java: Servlet 4.0 and what it means for the Java/Jakarta EE e...
HTTP/2 Comes to Java: Servlet 4.0 and what it means for the Java/Jakarta EE e...
 
Big datadc skyfall_preso_v2
Big datadc skyfall_preso_v2Big datadc skyfall_preso_v2
Big datadc skyfall_preso_v2
 
Modeling REST API's Behaviour with Text, Graphics or Both?
Modeling REST API's Behaviour with Text, Graphics or Both?Modeling REST API's Behaviour with Text, Graphics or Both?
Modeling REST API's Behaviour with Text, Graphics or Both?
 
CON5898 What Servlet 4.0 Means To You
CON5898 What Servlet 4.0 Means To YouCON5898 What Servlet 4.0 Means To You
CON5898 What Servlet 4.0 Means To You
 
The Very Very Latest in Database Development - Oracle Open World 2012
The Very Very Latest in Database Development - Oracle Open World 2012The Very Very Latest in Database Development - Oracle Open World 2012
The Very Very Latest in Database Development - Oracle Open World 2012
 
The Very Very Latest In Database Development - Lucas Jellema - Oracle OpenWor...
The Very Very Latest In Database Development - Lucas Jellema - Oracle OpenWor...The Very Very Latest In Database Development - Lucas Jellema - Oracle OpenWor...
The Very Very Latest In Database Development - Lucas Jellema - Oracle OpenWor...
 
Learn REST API at ASIT
Learn REST API at ASITLearn REST API at ASIT
Learn REST API at ASIT
 
The Good, the Bad and the Ugly of Migrating Hundreds of Legacy Applications ...
 The Good, the Bad and the Ugly of Migrating Hundreds of Legacy Applications ... The Good, the Bad and the Ugly of Migrating Hundreds of Legacy Applications ...
The Good, the Bad and the Ugly of Migrating Hundreds of Legacy Applications ...
 
Migrating Hundreds of Legacy Applications to Kubernetes - The Good, the Bad, ...
Migrating Hundreds of Legacy Applications to Kubernetes - The Good, the Bad, ...Migrating Hundreds of Legacy Applications to Kubernetes - The Good, the Bad, ...
Migrating Hundreds of Legacy Applications to Kubernetes - The Good, the Bad, ...
 
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
HTTP/2 Comes to Java - What Servlet 4.0 Means to YouHTTP/2 Comes to Java - What Servlet 4.0 Means to You
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
 
Integration Patterns with WSO2 ESB and WSO2 BPS
Integration Patterns with WSO2 ESB and WSO2 BPS Integration Patterns with WSO2 ESB and WSO2 BPS
Integration Patterns with WSO2 ESB and WSO2 BPS
 
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
 
ReST Vs SOA(P) ... Yawn
ReST Vs SOA(P) ... YawnReST Vs SOA(P) ... Yawn
ReST Vs SOA(P) ... Yawn
 
Explore Advanced CA Release Automation Configuration Topics
Explore Advanced CA Release Automation Configuration TopicsExplore Advanced CA Release Automation Configuration Topics
Explore Advanced CA Release Automation Configuration Topics
 
WordPress REST API v2: Overview & Exploring
WordPress REST API v2: Overview & ExploringWordPress REST API v2: Overview & Exploring
WordPress REST API v2: Overview & Exploring
 

Plus de Vladimir Tsukur

GraphQL APIs in Scala with Sangria
GraphQL APIs in Scala with SangriaGraphQL APIs in Scala with Sangria
GraphQL APIs in Scala with SangriaVladimir Tsukur
 
GraphQL - APIs The New Way
GraphQL - APIs The New WayGraphQL - APIs The New Way
GraphQL - APIs The New WayVladimir Tsukur
 
Hypermedia APIs and HATEOAS / Wix Engineering
Hypermedia APIs and HATEOAS / Wix EngineeringHypermedia APIs and HATEOAS / Wix Engineering
Hypermedia APIs and HATEOAS / Wix EngineeringVladimir Tsukur
 
Hypermedia APIs and HATEOAS
Hypermedia APIs and HATEOASHypermedia APIs and HATEOAS
Hypermedia APIs and HATEOASVladimir Tsukur
 
Hot and spicy Java with Lombok. Live!
Hot and spicy Java with Lombok. Live!Hot and spicy Java with Lombok. Live!
Hot and spicy Java with Lombok. Live!Vladimir Tsukur
 
Building Awesome API with Spring
Building Awesome API with SpringBuilding Awesome API with Spring
Building Awesome API with SpringVladimir Tsukur
 
From CRUD to Hypermedia APIs with Spring
From CRUD to Hypermedia APIs with SpringFrom CRUD to Hypermedia APIs with Spring
From CRUD to Hypermedia APIs with SpringVladimir Tsukur
 
Law of Demeter & Objective Sense of Style
Law of Demeter & Objective Sense of StyleLaw of Demeter & Objective Sense of Style
Law of Demeter & Objective Sense of StyleVladimir Tsukur
 
Abstraction Classes in Software Design
Abstraction Classes in Software DesignAbstraction Classes in Software Design
Abstraction Classes in Software DesignVladimir Tsukur
 
Acceptance Testing of Web UI
Acceptance Testing of Web UIAcceptance Testing of Web UI
Acceptance Testing of Web UIVladimir Tsukur
 

Plus de Vladimir Tsukur (10)

GraphQL APIs in Scala with Sangria
GraphQL APIs in Scala with SangriaGraphQL APIs in Scala with Sangria
GraphQL APIs in Scala with Sangria
 
GraphQL - APIs The New Way
GraphQL - APIs The New WayGraphQL - APIs The New Way
GraphQL - APIs The New Way
 
Hypermedia APIs and HATEOAS / Wix Engineering
Hypermedia APIs and HATEOAS / Wix EngineeringHypermedia APIs and HATEOAS / Wix Engineering
Hypermedia APIs and HATEOAS / Wix Engineering
 
Hypermedia APIs and HATEOAS
Hypermedia APIs and HATEOASHypermedia APIs and HATEOAS
Hypermedia APIs and HATEOAS
 
Hot and spicy Java with Lombok. Live!
Hot and spicy Java with Lombok. Live!Hot and spicy Java with Lombok. Live!
Hot and spicy Java with Lombok. Live!
 
Building Awesome API with Spring
Building Awesome API with SpringBuilding Awesome API with Spring
Building Awesome API with Spring
 
From CRUD to Hypermedia APIs with Spring
From CRUD to Hypermedia APIs with SpringFrom CRUD to Hypermedia APIs with Spring
From CRUD to Hypermedia APIs with Spring
 
Law of Demeter & Objective Sense of Style
Law of Demeter & Objective Sense of StyleLaw of Demeter & Objective Sense of Style
Law of Demeter & Objective Sense of Style
 
Abstraction Classes in Software Design
Abstraction Classes in Software DesignAbstraction Classes in Software Design
Abstraction Classes in Software Design
 
Acceptance Testing of Web UI
Acceptance Testing of Web UIAcceptance Testing of Web UI
Acceptance Testing of Web UI
 

Dernier

What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 

Dernier (20)

What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 

RESTful Title for Technical Document

  • 1. Vladimir Tsukur / Design Engineer & Team Lead @GlobalLogic, Partner @Easyhunt / Frost Digital REST 2014 Take a REST! Theory and Practice
  • 2. REpresentational State Transfer REST 2 team & tech lead @ vladimir tsukur partner @
  • 3. REpresentational State Transfer REST 3 architectural elements CCCooommmpppooonnneenentntssts Connectors Data
  • 4. REpresentational State Transfer REST GET /hist … 4 cat http.log | grep GET GET /hist PUT /doc/1 … cat http.log grep GET stdout stdin stdout ∅
  • 5. «An architectural style is a … set of CONSTRAINTS that restricts the roles of REpresentational State Transfer REST 5 architectural elements …» Roy T. Fielding, 2000
  • 6. REpresentational State Transfer REST REST is a style for WEB 6
  • 7. REpresentational REpresentational State Transfer REST 7 State Transfer
  • 11. REpresentational State Transfer REST 11 REST ? style ?
  • 12. REpresentational State Transfer REST 12 «Be of the web, not behind the web» Ian Robinson
  • 13. REpresentational State Transfer REST 13 WWW Requirements • Low Entry-barrier • Extensibility • Distributed Hypermedia • Internet-scale ✓Hypermedia ✓Prepare for change ✓Large-grain data transfer ✓Anarchic scalability ✓Independent deployment
  • 14. REpresentational State Transfer REST 14 REST Constraints
  • 15. REpresentational State Transfer REST 15 1. Client - Server 2. Stateless Server 3. Cache 4. Uniform Interface 5. Layered System 6. [Code-on-Demand]
  • 16. REpresentational State Transfer REST 16 1. Client - Server
  • 17. REpresentational State Transfer REST 17 1. Client - Server POST /hotels/lviv/nobilis/suite-room/booking … ! { «from»: «2014-09-10», «to»: «2012-09-20», «breakfast»: true } request
  • 18. REpresentational State Transfer REST 17 1. Client - Server POST /hotels/lviv/nobilis/suite-room/booking … ! { «from»: «2014-09-10», «to»: «2012-09-20», «breakfast»: true } request 201 Created … ! { «id»: «123», «from»: «2014-09-10», «to»: … } response
  • 19. REpresentational State Transfer REST 18 1. Client - Server Separation of Concerns: ! • Client responsible for UI • Server responsible for data storage
  • 20. REpresentational State Transfer REST 19 1. Client - Server
  • 21. REpresentational State Transfer REST 19 1. Client - Server + Scalability + Simplicity + Evolvability
  • 22. REpresentational State Transfer REST 20 2. Stateless Server
  • 23. REpresentational State Transfer REST 21 Two Types of State • Application State !• Resource State
  • 24. REpresentational State Transfer REST 22 Application State Where you ARE in the interaction / session Pending Confirmed Served create update rejected cancel Cancelled "live" confirmed Rejected update delete
  • 25. REpresentational State Transfer REST 23 Resource State What is stored on the server (beyond session)
  • 26. REpresentational State Transfer REST 24 2. Stateless Server • Each request contains ALL the information necessary to understand it ! • Application (session) state is kept on the client
  • 27. REpresentational State Transfer REST 25 2. Stateless Server
  • 28. REpresentational State Transfer REST 25 2. Stateless Server GET /hotels?page request { «hotels»: <1..25>, «_links»: { «next»: «/hotels?page=2» } } response
  • 29. GET /hotels?page=2 request REpresentational State Transfer REST 25 2. Stateless Server GET /hotels?page request { «hotels»: <1..25>, «_links»: { «next»: «/hotels?page=2» } } response { «hotels»: <26..50>, «_links»: { «previous»: «/hotels?page=1», «next»: «/hotels?page=3» } } response ⚡
  • 30. REpresentational State Transfer REST 26 2. Stateful Server
  • 31. REpresentational State Transfer REST 26 2. Stateful Server POST /session request response Set-Cookie: JSESSIONID=987
  • 32. GET /hotels Cookie: JSESSIONID=987 request REpresentational State Transfer REST 26 2. Stateful Server POST /session request response Set-Cookie: JSESSIONID=987 { «hotels»: <1..25> } response
  • 33. GET /hotels Cookie: JSESSIONID=987 request GET /hotels/next Cookie: JSESSIONID=987 request REpresentational State Transfer REST 26 2. Stateful Server POST /session request response Set-Cookie: JSESSIONID=987 { «hotels»: <1..25> } response { «hotels»: <26..50> } response
  • 35. REpresentational State Transfer REST 28 Use Cookies for Application State? ain’t RESTful, sorry!
  • 36. REpresentational State Transfer REST 29 2. Stateless Server
  • 37. REpresentational State Transfer REST 29 2. Stateless Server + Visibility + Reliability + Scalability
  • 38. REpresentational State Transfer REST 29 2. Stateless Server + Visibility + Reliability + Scalability - Performance - Consistency
  • 40. REpresentational State Transfer REST 31 3. Cache • Acts as a mediator between client & server potentially reusing responses to equivalent requests
  • 42. REpresentational State Transfer REST 32 3. Cache GET /hotels request 200 OK Cache-Control: max-age=3600, must-revalidate ! { «hotels»: <1..25>, … } response
  • 43. REpresentational State Transfer REST 32 3. Cache GET /hotels request 200 OK Cache-Control: max-age=3600, must-revalidate ! { «hotels»: <1..25>, … } response request cache GET /hotels 200 OK Cache-Control: max-age=3600, must-revalidate ! { «hotels»: <1..25>, … }
  • 45. REpresentational State Transfer REST 33 3. Cache + Efficiency + Scalability + UP Performance
  • 46. REpresentational State Transfer REST 33 3. Cache + Efficiency + Scalability + UP Performance - Reliability
  • 47. REpresentational State Transfer REST 34 Client-Cache - Stateless-Server = Web < 1994
  • 48. REpresentational State Transfer REST 35 Web < 1994 - Static documents - CERN libwww common library - No consistent set of semantics for all resources
  • 50. REpresentational State Transfer REST 37 4. Uniform Interface
  • 51. REpresentational State Transfer REST 38 4. Uniform Interface 1. Identification of resources 2. Manipulation of resources through representations 3. Self-descriptive messages 4. HATEOAS
  • 52. 4. Uniform Interface REpresentational State Transfer REST 39 Resource is a key abstraction
  • 53. REpresentational State Transfer REST 40 /images/beautiful-lviv.jpg
  • 54. REpresentational State Transfer REST 41 /images/beautiful-kyiv.jpg
  • 55. REpresentational State Transfer REST 42 /documents/folder/profile.doc
  • 56. REpresentational State Transfer REST 43 /time/current
  • 57. REpresentational State Transfer REST 44 /api/hotels/lviv
  • 58. REpresentational State Transfer REST 45 /api/hotels/lviv/nobilis
  • 59. REpresentational State Transfer REST 46 /api/hotels/lviv/nobilis/classic
  • 60. REpresentational State Transfer REST 47 /abstraction
  • 61. 4. Uniform Interface REpresentational State Transfer REST 48 resource => entity ! entity ≠> resource
  • 62. 4. Uniform Interface Resources REpresentational State Transfer REST 49 /v1
  • 63. 4. Uniform Interface Resources REpresentational State Transfer REST 49 /v1 /v2
  • 64. REpresentational State Transfer REST 49 /v1 /latest /v2 4. Uniform Interface Resources
  • 65. REpresentational State Transfer REST 49 /v1 /v2 /v3 /latest 4. Uniform Interface Resources
  • 66. 4. Uniform Interface Resources REpresentational State Transfer REST 49 /v1 /v2 /v3 /latest /v2 != /latest /v3 != /latest
  • 67. 4. Uniform Interface Resources REpresentational State Transfer REST 50 => {} => static: ! => dynamic:
  • 68. 4. Uniform Interface Resources REpresentational State Transfer REST 51 + Generality + Allows late binding + Allows to reference concept, not singular representation
  • 69. REpresentational State Transfer REST 52 4. Uniform Interface 4.1. Identification of Resources
  • 70. 4. Uniform Interface 4.1. Identification of Resources REpresentational State Transfer REST 53 http://www.google.com ftp://user:password@host:port/path urn:ISBN:0-395-36341-1
  • 71. REpresentational State Transfer REST 54 4. Uniform Interface 4.2. Manipulation of Resources through Representations
  • 72. 4. Uniform Interface Content Negotiation = Conneg REpresentational State Transfer REST 55 GET /current-time Accept: text/plain request
  • 73. 4. Uniform Interface Content Negotiation = Conneg REpresentational State Transfer REST 55 GET /current-time Accept: text/plain request 200 OK Content-Type: text/plain ! Thu Aug 30 2014 09:30:15 GMT+0300 (EEST) response
  • 74. 4. Uniform Interface Conneg REpresentational State Transfer REST 56 GET /current-time Accept: text/xml request
  • 75. 4. Uniform Interface Conneg REpresentational State Transfer REST 56 GET /current-time Accept: text/xml request 200 OK Content-Type: text/xml ! <current-time>1341095876929</current-time> response
  • 76. REpresentational State Transfer REST 57 GET /current-time Accept: text/plain;q=0.8, text/xml;q=0.9 request 4. Uniform Interface Conneg
  • 77. 4. Uniform Interface Conneg REpresentational State Transfer REST 57 GET /current-time Accept: text/plain;q=0.8, text/xml;q=0.9 request 200 OK Content-Type: text/xml ! <current-time>1341095876929</current-time> response
  • 78. REpresentational State Transfer REST 58 4. Uniform Interface Representation Structure 200 OK Content-Type: text/plain Content-Length: 41 ! Thu Aug 30 2014 09:30:15 GMT+0300 (EEST)
  • 79. Metadata REpresentational State Transfer REST 58 4. Uniform Interface Representation Structure 200 OK Content-Type: text/plain Content-Length: 41 ! Thu Aug 30 2014 09:30:15 GMT+0300 (EEST)
  • 80. Metadata REpresentational State Transfer REST 58 4. Uniform Interface Representation Structure 200 OK Content-Type: text/plain Content-Length: 41 ! Thu Aug 30 2014 09:30:15 GMT+0300 (EEST) Data
  • 81. 4. Uniform Interface REpresentational State Transfer REST 59 Content-Type drives processing of the payload, NOT the payload itself
  • 82. • = Data Format • Intention: • Automated processing (JSON, XML) • Rendered / viewed by a user (HTML) • Both • Composite Media Types • Affects Latency REpresentational State Transfer REST 60 4. Uniform Interface Media Types (Content-Type)
  • 83. 4. Uniform Interface Control Data • Defines purpose of the message GET REpresentational State Transfer REST 61 • Used to parameterize request (e.g. caching) If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
  • 84. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable
  • 85. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET
  • 86. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗
  • 87. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗
  • 88. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗
  • 89. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST
  • 90. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗
  • 91. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗
  • 92. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗
  • 93. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT
  • 94. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗
  • 95. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗
  • 96. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗
  • 97. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH
  • 98. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH ⊗
  • 99. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH ⊗ ⊗
  • 100. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH ⊗ ⊗ ⩗
  • 101. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH ⊗ ⊗ ⩗ DELETE
  • 102. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH ⊗ ⊗ ⩗ DELETE ⊗
  • 103. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH ⊗ ⊗ ⩗ DELETE ⊗ ⩗
  • 104. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH ⊗ ⊗ ⩗ DELETE ⊗ ⩗ ⊗
  • 105. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH ⊗ ⊗ ⩗ DELETE ⊗ ⩗ ⊗ HEAD
  • 106. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH ⊗ ⊗ ⩗ DELETE ⊗ ⩗ ⊗ HEAD ⩗
  • 107. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH ⊗ ⊗ ⩗ DELETE ⊗ ⩗ ⊗ HEAD ⩗ ⩗
  • 108. REpresentational State Transfer REST 62 4. Uniform Interface safe idempotent cacheable GET ⩗ ⩗ ⩗ POST ⊗ ⊗ ⩗ PUT ⊗ ⩗ ⊗ PATCH ⊗ ⊗ ⩗ DELETE ⊗ ⩗ ⊗ HEAD ⩗ ⩗ ⩗
  • 109. REpresentational State Transfer REST 63 4. Uniform Interface GET,PUT,POST, DELETE ≠ ! CRUD
  • 110. REpresentational State Transfer REST 64 4. Uniform Interface REST ≠ CRUD • CRUD represent operations on data • CRUD pushes business logic to caller
  • 111. 4. Uniform Interface REpresentational State Transfer REST 65 PUT or POST for Create/Update?
  • 112. 4. Uniform Interface REpresentational State Transfer REST 66 PUT/POST Guidelines • Use POST to create a resource identified by a service-generated URI • Use POST to append a resource to (or to update existing resource in) a collection identified by a service-generated URI • Use PUT to create or update a resource identified by a URI received by the client sending full content of the specified resource
  • 113. 4. Uniform Interface REpresentational State Transfer REST 67 POST POST /bookings { «room-id»: «lviv:nobilis:suite», «data»: { «from»: «2014-09-10», «to»: «2012-09-20», «breakfast»: true } } request 201 Created Location: /bookings/1 { «id»: «123», «room-id»: «lviv:nobilis:suite», «data»: … } response
  • 114. 4. Uniform Interface REpresentational State Transfer REST 67 POST POST /bookings { «room-id»: «lviv:nobilis:suite», «data»: { «from»: «2014-09-10», «to»: «2012-09-20», «breakfast»: true } } request 201 Created Location: /bookings/1 { «id»: «123», «room-id»: «lviv:nobilis:suite», «data»: … } response
  • 115. 4. Uniform Interface REpresentational State Transfer REST 67 POST POST /bookings { «room-id»: «lviv:nobilis:suite», «data»: { «from»: «2014-09-10», «to»: «2012-09-20», «breakfast»: true } } request 201 Created Location: /bookings/1 { «id»: «123», «room-id»: «lviv:nobilis:suite», «data»: … } response
  • 116. 4. Uniform Interface REpresentational State Transfer REST 68 PUT PUT /user/mykola/address { «street»: «M. Grinchenko», «house»: «2/1» } request 200 OK / 204 No Content { «street»: «M. Grinchenko», «house»: «2/1» } response
  • 117. 4. Uniform Interface 4.3. Self-descriptive messages REpresentational State Transfer REST 69 Each message includes enough information to describe how to process the message 200 OK Content-Type: application/json Cache-Control: max-age=3600, must-revalidate ! { «hotels»: <1..25>, … }
  • 118. 4. Uniform Interface 4.4. HATEOAS REpresentational State Transfer REST 70 Application state transitions fully driven by hypermedia
  • 119. REpresentational State Transfer REST 71 4. Uniform Interface
  • 120. REpresentational State Transfer REST 71 4. Uniform Interface + Simplicity + Visibility + Evolvability
  • 121. REpresentational State Transfer REST 71 4. Uniform Interface + Simplicity + Visibility + Evolvability - Efficiency
  • 122. REpresentational State Transfer REST 72 5. Layered System
  • 123. REpresentational State Transfer REST 72 5. Layered System
  • 124. 5. Layered System REpresentational State Transfer REST 73 Each component does not «see» beyond the immediate layer ! Intermediaries: • Proxies • Gateways
  • 125. REpresentational State Transfer REST 74 5. Layered System
  • 126. REpresentational State Transfer REST 74 5. Layered System + Simplicity + Scalability + Evolvability
  • 127. REpresentational State Transfer REST 74 5. Layered System + Simplicity + Scalability + Evolvability - UP Performance
  • 128. REpresentational State Transfer REST 75 6. [Code-on-Demand]
  • 129. REpresentational State Transfer REST 76 6. [Code-on-Demand] <!doctype html> <html lang="en"> <head> … <script src="path/to/script.js"></script> </head> … </html>
  • 130. REpresentational State Transfer REST 77 6. [Code-on-Demand] <!doctype html> <html lang="en"> <head> … <applet width="200" height="200" archive="applet.jar" code="com.example.MainClass" /> </head> … </html>
  • 131. REpresentational State Transfer REST 78 6. [Code-on-Demand]
  • 132. REpresentational State Transfer REST 78 6. [Code-on-Demand] + Client Simplicity + Extensibility
  • 133. REpresentational State Transfer REST 78 6. [Code-on-Demand] + Client Simplicity + Extensibility - Visibility
  • 134. REpresentational State Transfer REST 79 6. [Code-on-Demand] vs
  • 135. REpresentational State Transfer REST 79 6. [Code-on-Demand] vs + Simplicity + Visibility + UP Performance
  • 137. REpresentational State Transfer REST 81 profit + Performance + Scalability + Simplicity + Evolvability + Visibility + Portability …
  • 138. REpresentational State Transfer REST 82 Default REST Impl • HTTP (RFC 2616, RFC 7230-7235) • URI (RFC 3986) • HTML
  • 139. REpresentational State Transfer REST 83 Richardson Maturity Model
  • 141. REpresentational State Transfer REST 85 Level 0 - Book POST /bookings { «createBooking»: { «room-id»: «lviv:nobilis:suite», «data»: { «from»: «2014-09-10», «to»: «2012-09-20», «breakfast»: true } } } request 200 OK { «success»: { «id»: «123», «room-id»: «lviv:nobilis:suite», «data»: … } } response
  • 142. REpresentational State Transfer REST 86 Level 0 - Get Booking POST /bookings { «getBooking»: { «id»: «123» } } request 200 OK { «success»: { «id»: «123», «room-id»: «lviv:nobilis:suite», «data»: … } } response
  • 143. REpresentational State Transfer REST 87 Level 0 1. Single URI endpoint 2. Single HTTP method 3. Uses HTTP as transport, not app protocol 4. Does not use mechanics of the Web 5. Usually based on RPC Flickr SOAP API, Google AdSense API
  • 144. REpresentational State Transfer REST 88 Level 1 - Book POST /hotel/lviv/nobilis/suite { «createBooking»: { «from»: «2014-09-10», «to»: «2012-09-20», «breakfast»: true } } request 200 OK { «success»: { «id»: «123», «room-id»: «lviv:nobilis:suite», «data»: … } } response
  • 145. REpresentational State Transfer REST 89 Level 1 - Get Booking POST /bookings/123 { «getBooking»: { «id»: «123» } } request 200 OK { «success»: { «id»: «123», «room-id»: «lviv:nobilis:suite», «data»: … } } response
  • 146. REpresentational State Transfer REST 90 Level 1 1. Multiple resources 2. Single HTTP method 3. Action in URI or payload Flickr «REST» API, Amazon SimpleDB
  • 147. REpresentational State Transfer REST 91 Level 2 - Book POST /hotel/lviv/nobilis/suite/booking { «from»: «2014-09-10», «to»: «2012-09-20», «breakfast»: true } request 200 OK { «id»: «123», «room-id»: «lviv:nobilis:suite», «data»: … } response
  • 148. REpresentational State Transfer REST 92 Level 2 - Get Booking GET /bookings/123 request 200 OK { «id»: «123», «room-id»: «lviv:nobilis:suite», «data»: … } response
  • 149. REpresentational State Transfer REST 93 Level 2 1. Many URIs 2. Many verbs 3. But NO hypermedia Amazon S3 Twitter API Google Calendar API
  • 150. REpresentational State Transfer REST 94 Level 2 APIs HTTP-based Type 1 HTTP-based Type 2 Identification of Resources Yes Yes Manipulation of Resources through Representations Yes Yes Self-Descriptive Messages No Yes HATEOAS No No Examples Twitter API Google Calendar API
  • 151. REpresentational State Transfer REST 95 Level 3?
  • 152. REpresentational State Transfer REST 96 2 Hypermedia & Media Types
  • 154. «If the engine of application state (and hence the API) is not being driven by hypertext, then it cannot be RESTful and REpresentational State Transfer REST 98 cannot be a REST API. Period.» Roy T. Fielding, 2008
  • 156. REpresentational State Transfer REST 100 Browsing Follow links Change application state Move towards your goal
  • 157. REpresentational State Transfer REST 101 Take a REST https://github.com/flushdia/take-a-REST
  • 158. { «take-a-rest:hotel»: { «href»: «http://localhost:8080/api/hotels/2», «mediaType»: «application/hal+json» } } REpresentational State Transfer REST 102 link ‣ URI - identifies a resource with which the consumer can interact to progress the application protocol ‣ rel - contains semantic markup (=> verb, headers, structure of the payload) ‣ mediaType - format of the payload
  • 159. REpresentational State Transfer REST 103 Legal interactions between consumer and a set of resources involved in a business process Pending Confirmed Served create update rejected cancel Cancelled "live" confirmed Rejected update delete Domain Application Protocol
  • 160. REpresentational State Transfer REST 104 Application Lifecycle
  • 161. REpresentational State Transfer REST 105 Booking Lifecycle
  • 163. REpresentational State Transfer REST 107 CREATED Booking Initial Transitions
  • 164. REpresentational State Transfer REST 108 CREATED Booking payment N/A - to be paid on the spot N/A
  • 165. if (booking.links.has(«payment»)) { // draw payment button / UI } REpresentational State Transfer REST 109 Client
  • 166. REpresentational State Transfer REST 110 HATEOAS client does NOT break, because it does NOT expect link to be always available
  • 167. REpresentational State Transfer REST 111 CREATED Booking service link added - new functionality N/A
  • 168. REpresentational State Transfer REST 112 Upgraded / new client MAY leverage new features when updated. ! Existing clients stay intact
  • 169. REpresentational State Transfer REST 113 Client may know HOW, but NOT WHEN
  • 170. «REST doesn’t eliminate the need for a clue. What REST does is concentrate that need for prior knowledge into readily standardizable forms. That is the essential distinction between data-oriented and REpresentational State Transfer REST 114 control-oriented integration.» Roy T. Fielding, 2008
  • 171. «... It has value because it is far easier to standardize representation and relation types than it is to standardize objects and object-specific interfaces ...» REpresentational State Transfer REST Roy T. Fielding, 2008 115
  • 172. REpresentational State Transfer REST 116 profit • API: explorable & self-documented • Client: • No URL construction • No domain logic replication • Less coupling • Server: • Transparent resource relocation • Easier versioning & evolvability
  • 173. REpresentational State Transfer REST 117 Is somebody hypermedia-ing?
  • 175. URI Template Contract REpresentational State Transfer REST 119 URL Methods /api/bookings GET, POST /api/bookings/{id} GET, POST, PUT, DELETE /api/hotels GET /api/hotels/{id} GET
  • 176. URI Template Contract NOT HATEOAS REpresentational State Transfer REST 119 URL Methods /api/bookings GET, POST /api/bookings/{id} GET, POST, PUT, DELETE /api/hotels GET /api/hotels/{id} GET
  • 177. REpresentational State Transfer REST 120 URI Template Contract - Client is bound to honoring URI structure (URIs change!) - Exposing more detail about implementation then necessary - Domain-specific logic duplicated on the client-side
  • 178. REpresentational State Transfer REST 121 REST does NOT care about URI values /whatever/is/fine/ to/be/restful
  • 179. REpresentational State Transfer REST 122 Single entry-point URI(s) * /api * (or a limited set of URIs)
  • 180. REpresentational State Transfer REST 123 Other stuff discovered via links
  • 181. REpresentational State Transfer REST 124 Extras!
  • 182. REpresentational State Transfer REST 125 Resource State
  • 183. REpresentational State Transfer REST 126 Resource State 1. Information belonging to the resource 2. Links to related resources 3. Possible transition(s) to a future state(s) of the resource
  • 184. REpresentational State Transfer REST 127 Resource State 1. Info belonging to resource
  • 185. REpresentational State Transfer REST 128 Resource State 2. Links to related resources
  • 186. REpresentational State Transfer REST 129 Resource State 3. Possible state transitions
  • 187. 4. Uniform Interface REpresentational State Transfer REST 130 Media Type HTTP/1.1 200 OK Content-Type: application/json … ! { «_links»: …, «_embedded»: …, «city»: "Kyiv", «from»: [ 2014, 10, 1 ], «to»: [ 2014, 10, 15 ], «hotel»: "Premier Palace", «includeBreakfast»: false, «paid»: true, «price»: 1000, «roomType»: "ROOM" }
  • 188. 4. Uniform Interface HTTP/1.1 200 OK Content-Type: application/json … ! { «_links»: …, «_embedded»: …, «city»: "Kyiv", «from»: [ 2014, 10, 1 ], «to»: [ 2014, 10, 15 ], «hotel»: "Premier Palace", «includeBreakfast»: false, «paid»: true, «price»: 1000, «roomType»: "ROOM" } REpresentational State Transfer REST 130 Media Type Should it be interpreted as plain vanilla JSON?
  • 189. 4. Uniform Interface REpresentational State Transfer REST 131 Better Media Type HTTP/1.1 200 OK Content-Type: application/vnd.take-a-rest.booking+json … ! { «_links»: …, «_embedded»: …, «city»: "Kyiv", «from»: [ 2014, 10, 1 ], «to»: [ 2014, 10, 15 ], «hotel»: "Premier Palace", «includeBreakfast»: false, «paid»: true, «price»: 1000, «roomType»: "ROOM" }
  • 190. 4. Uniform Interface REpresentational State Transfer REST 132 Media Type Profile HTTP/1.1 200 OK Content-Type: application/hal+json; profile=take-a-rest:booking … ! { «_links»: …, «_embedded»: …, «city»: "Kyiv", «from»: [ 2014, 10, 1 ], «to»: [ 2014, 10, 15 ], «hotel»: "Premier Palace", «includeBreakfast»: false, «paid»: true, «price»: 1000, «roomType»: "ROOM" }
  • 191. 4. Uniform Interface REpresentational State Transfer REST 133 Should we give each representation a media type?
  • 192. 4. Uniform Interface REpresentational State Transfer REST 134 Media Types / Representations ‣ Usually there is NO 1:1 relationship between media type and representation ‣ Usually having one single monolithic media type is too bulky ‣ One media type per application domain context is usually OK
  • 193. «A REST API should spend almost all of its descriptive effort in defining the media type(s) used for representing resources and driving application state, or in defining REpresentational State Transfer REST 135 extended relation names and/or hypertext-enabled mark-up for existing standard media types.» Roy T. Fielding, 2008
  • 194. REpresentational State Transfer REST 136 Hypermedia Factors Measurement of the level of hypermedia support
  • 195. Hypermedia Factors / Link Support <img src="/images/cities/lviv.jpg"> REpresentational State Transfer REST 137 LE = Link Embedded HTTP GET
  • 196. Hypermedia Factors / Link Support REpresentational State Transfer REST 138 LO = Link Outbound <a href="/pages/hotels/nobilis-lviv.html"> Nobilis Lviv </a> HTTP GET
  • 197. Hypermedia Factors / Link Support REpresentational State Transfer REST 139 LT = Templated Queries <form method="get" action="/hotels/search"> <input name="query" type="text"> <input type="submit"> </form> HTTP GET
  • 198. LN = Non-Idempotent Updates REpresentational State Transfer REST 140 Hypermedia Factors / Link Support <form method="post" action="/bookings"> <input name="roomId" type="hidden" value="3"> <input name="from" type="text"> <input name="to" type="text"> <input type="submit"> </form> HTTP POST
  • 199. Hypermedia Factors / Link Support REpresentational State Transfer REST 141 LI = Idempotent Updates new XmlHttpRequest().open("DELETE", "/bookings/3") HTTP PUT, DELETE
  • 200. Hypermedia Factors / Control Data Support REpresentational State Transfer REST 142 CR = Read Modification <xsl:include href=«/newsfeed" accept="application/rss" /> HTTP Accept-* headers
  • 201. Hypermedia Factors / Control Data Support <form method="post" action=«/bookings" enctype="application/x-www-form-urlencoded"> <input name="roomId" type="hidden" value="3"> <input name="from" type="text"> <input name="to" type="text"> <input type="submit"> </form> REpresentational State Transfer REST 143 CU = Update Modification HTTP Content-* headers
  • 202. Hypermedia Factors / Control Data Support <form method="post" action="/bookings"> <input name="roomId" type="hidden" value="3"> <input name="from" type="text"> <input name="to" type="text"> <input type="submit"> </form> REpresentational State Transfer REST 144 CM = Method Modification HTTP GET/PUT/POST/…
  • 203. Hypermedia Factors / Control Data Support <link rel="stylesheet" src="styles.css" /> REpresentational State Transfer REST 145 CL = Link Semantics HTTP GET/PUT/POST/…
  • 204. REpresentational State Transfer REST 146 Hypermedia Factors What about and ?
  • 205. REpresentational State Transfer REST HTML XML JSON LE ⩗ ⊗ ⊗ LO ⩗ ⊗ ⊗ LT ⩗ ⊗ ⊗ LN ⩗ ⊗ ⊗ LI ⊗ ⊗ ⊗ CR ⊗ ⊗ ⊗ CU ⩗ ⊗ ⊗ CM ⩗ ⊗ ⊗ CL ⩗ ⊗ ⊗ 147 Hypermedia Factors
  • 206. REpresentational State Transfer REST JSON-LD JSON API HAL Cj Siren Mason Uber LE ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ LO ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ LT ⊗ ⩗ ⩗ ⩗ ⊗ ⩗ ⩗ LN ⊗ ⊗ ⊗ ⩗ ⩗ ⩗ ⩗ LI ⊗ ⊗ ⊗ ⩗ ⩗ ⩗ ⩗ CR ⊗ ⊗ ⩗ ⊗ ⩗ ⩗ ⩗ CU ⊗ ⊗ ⊗ ⊗ ⩗ ⩗ ⩗ CM ⊗ ⊗ ⊗ ⊗ ⩗ ⩗ ⩗ CL ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ ⩗ 148 JSON-based Media Types
  • 207. REpresentational State Transfer REST 149 HAL Overview Hypertext Application Language: • simple format • explorable & discoverable APIs • for JSON: ! application/vnd+json • for XML: application/vnd+xml
  • 209. REpresentational State Transfer REST 151 HAL - state
  • 210. REpresentational State Transfer REST 152 HAL - links
  • 211. HAL - embedded resources REpresentational State Transfer REST 153
  • 213. REpresentational State Transfer REST 155 HAL - CURies
  • 214. REpresentational State Transfer REST 155 HAL - CURies • Resource documentation • Link name-spacing
  • 215. REpresentational State Transfer REST 156 HAL Language Support • Java • Spring HATEOAS • halbuilder-java • halarious • HyperExpress-HAL • JavaScript • Scala, Clojure, Ruby, Python, PHP, Objective C, C#, Eiffel, Go, Rust, …
  • 216. REpresentational State Transfer REST 157 HAL APIs
  • 217. REpresentational State Transfer REST 158 Versioning
  • 218. REpresentational State Transfer REST 159 1. Version in URI
  • 219. REpresentational State Transfer REST 159 1. Version in URI http://www.booking-rest.com/v1/bookings
  • 220. http://www.booking-rest.com/v1/bookings REpresentational State Transfer REST 159 1. Version in URI • /v1/bookings/9111 != /v2/bookings/9111? Not necessarily • Should client support both /v1 and /v2? Maintenance nightmare • Should client start constructing URIs then? Breaks HATEOAS
  • 221. REpresentational State Transfer REST 160 2. Version in Media Type
  • 222. REpresentational State Transfer REST 160 2. Version in Media Type • Another representation of /bookings/9111? Yes! • Should client support both /v1 and /v2? Client chooses which version to support through «Accept» • No need to construct URIs HATEOAS preserved
  • 223. application/vnd.booking.v2+json application/vnd.booking+json; version=2.0 REpresentational State Transfer REST 160 2. Version in Media Type • Another representation of /bookings/9111? Yes! • Should client support both /v1 and /v2? Client chooses which version to support through «Accept» • No need to construct URIs HATEOAS preserved
  • 224. REpresentational State Transfer REST 161 3. Version in Header
  • 225. REpresentational State Transfer REST 161 3. Version in Header X-REST-API-Version: 2.0
  • 226. REpresentational State Transfer REST 161 3. Version in Header X-REST-API-Version: 2.0 Can be filtered out by proxies or intermediaries
  • 227. REpresentational State Transfer REST 162 4. Best Advice DO NOT VERSION!
  • 228. REpresentational State Transfer REST 162 4. Best Advice DO NOT VERSION! Support backwards compatibility, enable discovery
  • 229. REpresentational State Transfer REST 163 API Survey March 2014 180+ respondents
  • 230. Security Usability Can't decide REpresentational State Transfer REST 164 API Survey - Top Priority 18 % 38 % 44 %
  • 231. JSON XML Other REpresentational State Transfer REST 165 API Survey - Format 2 % 48 % 51 %
  • 232. SOAP CRUD Hypermedia REpresentational State Transfer REST 166 API Survey - Style (Now) 24 % 39 % 38 %
  • 233. 28 % 21 % 14 % 7 % REpresentational State Transfer REST 167 API Survey - Plans to add 0 % Hypermedia SOAP CRUD
  • 234. References - REST Core • http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm • https://groups.yahoo.com/neo/groups/rest-discuss/conversations/topics/6735 • http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven • http://www.infoq.com/presentations/The-Counterintuitive-Web • http://ruben.verborgh.org/blog/2012/08/24/rest-wheres-my-state/ • https://code.google.com/p/implementing-rest/wiki/Video • http://channel9.msdn.com/posts/TechTalk-RESTful-Application-Protocols-From-Design-to- REpresentational State Transfer REST 168 Implementation • http://www.infoq.com/presentations/qcon-tilkov-rest-intro • http://www.infoq.com/presentations/vinoski-rest-serendipity • http://bitworking.org/news/373/An-Introduction-to-REST • http://vimeo.com/15697358 • http://www.infoq.com/presentations/vinoski-rpc-convenient-but-flawed • https://www.youtube.com/watch?v=llpr5924N7E • https://www.youtube.com/watch?v=8Q7GyIBrysA • http://steve.vinoski.net/pdf/IEEE-Demystifying_RESTful_Data_Coupling.pdf • http://www.crummy.com/writing/speaking/2008-QCon/act3.html • http://martinfowler.com/articles/richardsonMaturityModel.html
  • 235. References - HTTP & URI • https://www.mnot.net/blog/2014/06/07/rfc2616_is_dead • http://www.ietf.org/rfc/rfc2616.txt • http://tools.ietf.org/html/rfc7230 • http://tools.ietf.org/html/rfc7231 • http://tools.ietf.org/html/rfc7234 • https://www.mnot.net/blog/2013/05/15/http_problem • https://www.mnot.net/blog/2012/12/04/api-evolution • https://www.mnot.net/blog/2012/09/05/patch • https://www.mnot.net/blog/2012/06/25/http_api_complexity_model • https://www.mnot.net/blog/2012/04/17/profiles • https://www.mnot.net/blog/2009/02/18/x- • http://tools.ietf.org/html/rfc3986 • https://tools.ietf.org/html/rfc5789 • http://tools.ietf.org/html/rfc6570 REpresentational State Transfer REST 169
  • 236. References - Hypermedia & APIs • https://www.mnot.net/blog/2013/06/23/linking_apis • http://oredev.org/2010/sessions/hypermedia-apis • http://vimeo.com/75106815 • https://www.innoq.com/blog/st/2012/06/hypermedia-benefits-for-m2m-communication/ • http://ws-rest.org/2014/sites/default/files/wsrest2014_submission_12.pdf • http://www.infoq.com/news/2014/03/ca-api-survey • https://twitter.com/hypermediaapis • https://www.youtube.com/watch?v=hdSrT4yjS1g • https://www.youtube.com/watch?v=mZ8_QgJ5mbs • http://nordsc.com/ext/classification_of_http_based_apis.html • http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html • https://github.com/mamund/Building-Hypermedia-APIs • http://amundsen.com/hypermedia/hfactor/ • http://tech.blog.box.com/2013/04/get-developer-hugs-with-rich-error-handling-in-your-api/ REpresentational State Transfer REST 170
  • 237. References - Media Types • http://stateless.co/hal_specification.html • https://github.com/kevinswiber/siren • https://github.com/JornWildt/Mason • http://json-ld.org/ • http://amundsen.com/media-types/collection/ • http://soabits.blogspot.com/2013/12/media-types-for-apis.html • http://soabits.blogspot.no/2013/05/the-role-of-media-types-in-restful-web. REpresentational State Transfer REST 171 html • http://soabits.blogspot.com/2014/03/modelling-shipment-example-as. html • http://soabits.blogspot.com/2014/02/representing-issue-tracker-with-mason. html • https://github.com/mamund/media-types/blob/master/uber-hypermedia. asciidoc
  • 238. References - Versioning • https://www.mnot.net/blog/2012/12/04/api-evolution • https://www.mnot.net/blog/2012/07/11/header_versioning • https://www.mnot.net/blog/2011/10/25/web_api_versioning_smackdown • http://www.infoq.com/news/2013/12/api-versioning • http://www.infoq.com/articles/Web-Service-Contracts • http://www.infoq.com/news/2013/09/versioning-restful-services • http://www.infoq.com/news/2010/06/rest-versioning • http://www.ebpml.org/blog2/index.php/2013/11/25/understanding-the-costs- REpresentational State Transfer REST 172 of-versioning • http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is. html • http://www.infoq.com/articles/contract-versioning-comp2
  • 239. REpresentational State Transfer REST 173 References - Caching • https://www.mnot.net/cache_docs/ • https://www.mnot.net/blog/2007/05/15/expires_max-age • http://tools.ietf.org/html/rfc7232 • https://devcenter.heroku.com/articles/increasing-application-performance- with-http-cache-headers • https://devcenter.heroku.com/articles/jax-rs-http-caching
  • 240. REpresentational State Transfer REST 174 References - Tutorials & Tools • https://jax-rs-spec.java.net/ • http://www.oracle.com/technetwork/articles/java/jaxrs20-1929352.html • http://resteasy.jboss.org/ • https://code.google.com/p/siren4j/ • http://gotohal.net/ • https://www.youtube.com/watch?v=1wEp9yHHtwg • https://www.youtube.com/watch?v=sVvL12BnIyQ • https://www.youtube.com/watch?v=pCnXy2Hs2Ag • https://www.youtube.com/watch?v=_0kmqtWYvaY • http://kingsfleet.blogspot.com/2014/02/transparent-patch-support-in-jax-rs-20.html • http://spring.io/guides/tutorials/rest/ • https://jaxb.java.net/ • https://github.com/FasterXML/jackson
  • 241. REST 175 Thanks! Questions?