SlideShare a Scribd company logo
FIVE INCONVENIENT TRUTHS ABOUT REST
Filip van Laenen
1
https://www.flickr.com/photos/grantmac/4192158869
Who Am I?
2
●
18 years of experience as a developer/architect
●
Been involved in a number of REST projects
– Client/consumer
– Server/producer
●
Things I wish I knew a couple of years ago…
http://www.slideshare.net/filipvanlaenen/
REST – Representational state transfer
3
From Wikipedia:
“Representational State Transfer (REST)
is a software architecture style for
building scalable web services.
REST gives a coordinated set of
constraints to the design of components
in a distributed hypermedia system that
can lead to a higher performing and
more maintainable architecture.”
REST – Representational state transfer
4
From Wikipedia:
“RESTful systems typically, but not
always, communicate over the Hypertext
Transfer Protocol with the same HTTP
verbs (GET, POST, PUT, DELETE, etc.)
which web browsers use to retrieve web
pages and to send data to remote
servers.
REST interfaces usually involve
collections of resources with identifiers,
for example /people/paul, which can be
operated upon using standard verbs,
such as DELETE /people/paul.”
5
http://martinfowler.com/articles/richardsonMaturityModel.html
Richardson Maturity Model
So, what's wrong with REST?
6
Ever Heared a REST-Discussion about “State”?
7
Ever Heared a REST-Discussion about “State”?
8
From Wikipedia:
“The client–server communication is
constrained by no client context being
stored on the server between requests.”
INCONVENIENT TRUTH #1:
GET calls are never nullipotent
9
https://www.flickr.com/photos/grantmac/4192158869
10
http://martinfowler.com/articles/richardsonMaturityModel.html
Richardson Maturity Model
What does «nullipotent» mean?
11
From Wikipedia:
“The GET method is a safe method (or
nullipotent), meaning that calling it
produces no side-effects.”
What does «nullipotent» mean?
12
From Wikipedia:
“The GET method is a safe method (or
nullipotent), meaning that calling it
produces no side-effects.”
13
Tomcat Access
Log
Wanted Side-effects
●
Access log from a REST resource
●
Access control
– Three strikes and you're out
●
One-time downloads
– Think “Snapchat”
14
GET Methods with Side-effects Are OK
15
…if the side-effects are:
●
General good practices
●
Part of the domain
GET Methods with Side-effects Are OK
16
…if the side-effects are:
●
General good practices
●
Part of the domain
In other words:
●
Unobservable
●
Expected
INCONVENIENT TRUTH #2:
HTTP Verbs ≠ “REST Verbs”
17
https://www.flickr.com/photos/grantmac/4192158869
18
http://martinfowler.com/articles/richardsonMaturityModel.html
Richardson Maturity Model
19
https://en.wikipedia.org/wiki/Representational_state_transfer
HTTP Verbs
20
https://en.wikipedia.org/wiki/Representational_state_transfer
HTTP Verbs
HTTP/1.1 Spec about POST and PUT
21
The POST method is used to request that the origin server
accept the entity enclosed in the request as a new
subordinate of the resource identified by the Request-URI
in the Request-Line.
The PUT method requests that the enclosed entity be
stored under the supplied Request-URI. If the Request-URI
refers to an already existing resource, the enclosed entity
SHOULD be considered as a modified version of the one
residing on the origin server. If the Request-URI does not
point to an existing resource, and that URI is capable of
being defined as a new resource by the requesting user
agent, the origin server can create the resource with that
URI.
HTTP/1.1 Spec about POST and PUT
22
The POST method is used to request that the origin server
accept the entity enclosed in the request as a new
subordinate of the resource identified by the Request-URI
in the Request-Line.
The PUT method requests that the enclosed entity be
stored under the supplied Request-URI. If the Request-URI
refers to an already existing resource, the enclosed entity
SHOULD be considered as a modified version of the one
residing on the origin server. If the Request-URI does not
point to an existing resource, and that URI is capable of
being defined as a new resource by the requesting user
agent, the origin server can create the resource with that
URI.
HTTP/1.1 Spec about POST and PUT
23
The POST method is used to request that the origin server
accept the entity enclosed in the request as a new
subordinate of the resource identified by the Request-URI
in the Request-Line.
The PUT method requests that the enclosed entity be
stored under the supplied Request-URI. If the Request-URI
refers to an already existing resource, the enclosed entity
SHOULD be considered as a modified version of the one
residing on the origin server. If the Request-URI does not
point to an existing resource, and that URI is capable of
being defined as a new resource by the requesting user
agent, the origin server can create the resource with that
URI.
HTTP/1.1 Spec about POST and PUT
24
The POST method is used to request that the origin server
accept the entity enclosed in the request as a new
subordinate of the resource identified by the Request-URI
in the Request-Line.
The PUT method requests that the enclosed entity be
stored under the supplied Request-URI. If the Request-URI
refers to an already existing resource, the enclosed entity
SHOULD be considered as a modified version of the one
residing on the origin server. If the Request-URI does not
point to an existing resource, and that URI is capable of
being defined as a new resource by the requesting user
agent, the origin server can create the resource with that
URI.
25
https://en.wikipedia.org/wiki/Representational_state_transfer
HTTP Verbs
INCONVENIENT TRUTH #3:
HTTP Response Codes ≠ “REST Response Codes”
26
https://www.flickr.com/photos/grantmac/4192158869
27
http://martinfowler.com/articles/richardsonMaturityModel.html
Richardson Maturity Model
Martin Fowler on HATEOAS
28
“The key elements that are supported
by the existence of the web are the
strong separation between safe (eg
GET) and non-safe operations, together
with using status codes to help
communicate the kinds of errors you
run into.”
http://martinfowler.com/articles/richardsonMaturityModel.html
29
http://www.restapitutorial.com/httpstatuscodes.html
30
http://www.restapitutorial.com/httpstatuscodes.html
31
http://www.restapitutorial.com/httpstatuscodes.html
What If Something Else Is Wrong?
32
Semantical errors, but syntactically correct:
●
References to resources that don't exist
●
Illegal values
●
Invalid combination of choices
●
Anything else that doesn't make sense in your
domain
33
http://www.restapitutorial.com/httpstatuscodes.html
422 Unprocessable Entity
34
From IETF RFC 4918:
“The 422 (Unprocessable Entity) status code means the server
understands the content type of the request entity (hence a 415
(Unsupported Media Type) status code is inappropriate), and the
syntax of the request entity is correct (thus a 400 (Bad Request)
status code is inappropriate) but was unable to process the
contained instructions.
For example, this error condition may occur if an XML request
body contains well-formed (i.e., syntactically correct), but
semantically erroneous, XML instructions.”
https://tools.ietf.org/html/rfc4918#section-11.2
35
http://www.restapitutorial.com/httpstatuscodes.html
INCONVENIENT TRUTH #4:
HATEOAS YAGNI⇒
36
https://www.flickr.com/photos/grantmac/4192158869
37
Fra: http://martinfowler.com/articles/richardsonMaturityModel.html
Richardson Maturity Model
HATEOAS
38
Hypermedia as the engine of application state
From Wikipedia:
“Clients make state transitions only through
actions that are dynamically identified within
hypermedia by the server.
Except for simple fixed entry points to the
application, a client does not assume that any
particular action is available for any particular
resources beyond those described in
representations previously received from the
server.”
Example Message
39
<Hire id="h101442">
<CcuId>141705</CcuId>
<EnclosingHireIds>
<EnclosingHireId distance="1">a1</EnclosingHireId>
</EnclosingHireIds>
<OrgNo>123456789</OrgNo>
<GlnLocation>1234567890123</GlnLocation>
<StartDate>2013-10-09</StartDate>
<EndDate>2013-11-08</EndDate>
<Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/>
<Link href="/ccus/141705" method="get" rel="Ccu"/>
<Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/>
</Hire>
Example Message
40
<Hire id="h101442">
<CcuId>141705</CcuId>
<EnclosingHireIds>
<EnclosingHireId distance="1">a1</EnclosingHireId>
</EnclosingHireIds>
<OrgNo>123456789</OrgNo>
<GlnLocation>1234567890123</GlnLocation>
<StartDate>2013-10-09</StartDate>
<EndDate>2013-11-08</EndDate>
<Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/>
<Link href="/ccus/141705" method="get" rel="Ccu"/>
<Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/>
</Hire>
Example Message
41
<Hire id="h101442">
<CcuId>141705</CcuId>
<EnclosingHireIds>
<EnclosingHireId distance="1">a1</EnclosingHireId>
</EnclosingHireIds>
<OrgNo>123456789</OrgNo>
<GlnLocation>1234567890123</GlnLocation>
<StartDate>2013-10-09</StartDate>
<EndDate>2013-11-08</EndDate>
<Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/>
<Link href="/ccus/141705" method="get" rel="Ccu"/>
<Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/>
</Hire>
199 out of 477 bytes
(42%)
Example Message using Full HATEOAS
42
<Hire id="h101442">
<CcuId>141705</CcuId>
<EnclosingHireIds>
<EnclosingHireId distance="1">a1</EnclosingHireId>
</EnclosingHireIds>
<OrgNo>123456789</OrgNo>
<GlnLocation>1234567890123</GlnLocation>
<StartDate>2013-10-09</StartDate>
<EndDate>2013-11-08</EndDate>
<Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/>
<Link href="/ccus/141705" method="get" rel="Ccu"/>
<Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/>
<Link href="/organizations/123456789" method="get" rel="Organization"/>
<Link href="/organizations/123456789/locations/1234567890123" method="get" rel="Location"/>
<Link href="/ccus/141705/hires/a1/hires/h101442/documents" method="post" rel="Documents"/>
<Link href="/ccus/141705/hires/a1/hires/h101442" method="put" rel="update"/>
<Link href="/ccus/141705/hires/a1/hires/h101442/hires" method="post" rel="addHire"/>
</Hire>
620 out of 899 bytes
(69%)
Martin Fowler on HATEOAS
43
“One obvious benefit of hypermedia
controls is that it allows the server to
change its URI scheme without
breaking clients. As long as clients look
up the ‘addTest’ link URI then the server
team can juggle all URIs other than the
initial entry points.”
http://martinfowler.com/articles/richardsonMaturityModel.html
Martin Fowler on HATEOAS
44
“A further benefit is that it helps client
developers explore the protocol. The
links give client developers a hint as to
what may be possible next. It doesn't
give all the information: both the
“latest” and “cancel” controls point to
the same URI – they need to figure out
that one is a GET and the other a
DELETE. But at least it gives them a
starting point as to what to think about
for more information and to look for a
similar URI in the protocol
documentation.”
http://martinfowler.com/articles/richardsonMaturityModel.html
Cost/Benefit of HATEOAS
What will change most often?
●
Behavior
●
Content
●
URIs
What's hard to refactor?
●
Behavior
●
Content
●
URIs
45
Example Message
46
<Hire id="h101442">
<CcuId>141705</CcuId>
<EnclosingHireIds>
<EnclosingHireId distance="1">b2</EnclosingHireId>
<EnclosingHireId distance="2">a1</EnclosingHireId>
</EnclosingHireIds>
<OrgNo>123456789</OrgNo>
<GlnLocation>1234567890123</GlnLocation>
<StartDate>2013-10-09</StartDate>
<EndDate>2013-11-08</EndDate>
<Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/>
<Link href="/ccus/141705" method="get" rel="Ccu"/>
<Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/>
<Link href="/organizations/123456789" method="get" rel="Organization"/>
<Link href="/organizations/123456789/locations/1234567890123" method="get" rel="Location"/>
<Link href="/ccus/141705/hires/a1/hires/h101442/documents" method="post" rel="Documents"/>
<Link href="/ccus/141705/hires/a1/hires/h101442" method="put" rel="update"/>
<Link href="/ccus/141705/hires/a1/hires/h101442/hires" method="post" rel="addHire"/>
</Hire>
Example Message
47
<Hire id="h101442">
<CcuId>141705</CcuId>
<EnclosingHireIds>
<EnclosingHireId distance="1">b2</EnclosingHireId>
<EnclosingHireId distance="2">a1</EnclosingHireId>
</EnclosingHireIds>
<OrgNo>123456789</OrgNo>
<GlnLocation>1234567890123</GlnLocation>
<StartDate>2013-10-09</StartDate>
<EndDate>2013-11-08</EndDate>
<Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/>
<Link href="/ccus/141705" method="get" rel="Ccu"/>
<Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/>
<Link href="/organizations/123456789" method="get" rel="Organization"/>
<Link href="/organizations/123456789/locations/1234567890123" method="get" rel="Location"/>
<Link href="/ccus/141705/hires/a1/hires/h101442/documents" method="post" rel="Documents"/>
<Link href="/ccus/141705/hires/a1/hires/h101442" method="put" rel="update"/>
<Link href="/ccus/141705/hires/a1/hires/h101442/hires" method="post" rel="addHire"/>
</Hire>
HATEOAS
48
●
Uses a lot of bandwidth
●
To avoid refactoring something
that's easy to refactor
●
Infrequent changes
●
YAGNI (You aren't gonna need it)
INCONVENIENT TRUTH #5:
Hierarchical URIs will kill you in the end
49
https://www.flickr.com/photos/grantmac/4192158869
50
Fra: http://martinfowler.com/articles/richardsonMaturityModel.html
Richardson Maturity Model
Example Message
51
<Hire id="h101442">
<CcuId>141705</CcuId>
<EnclosingHireIds>
<EnclosingHireId distance="1">b2</EnclosingHireId>
<EnclosingHireId distance="2">a1</EnclosingHireId>
</EnclosingHireIds>
<OrgNo>123456789</OrgNo>
<GlnLocation>1234567890123</GlnLocation>
<StartDate>2013-10-09</StartDate>
<EndDate>2013-11-08</EndDate>
<Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/>
<Link href="/ccus/141705" method="get" rel="Ccu"/>
<Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/>
<Link href="/organizations/123456789" method="get" rel="Organization"/>
<Link href="/organizations/123456789/locations/1234567890123" method="get" rel="Location"/>
<Link href="/ccus/141705/hires/a1/hires/h101442/documents" method="post" rel="Documents"/>
<Link href="/ccus/141705/hires/a1/hires/h101442" method="put" rel="update"/>
<Link href="/ccus/141705/hires/a1/hires/h101442/hires" method="post" rel="addHire"/>
</Hire>
Composition
●
A hire on an asset cannot exist
without the asset
●
A subhire on a superhire cannot
exist without the superhire
●
A journey during a hire cannot
exist without the hire
●
Etc…
52
https://www.flickr.com/photos/aspis7/5075169756
Example Hierarchical URI
53
/ccus/734975456/hires/13464654/hires/h101442/journeys/59267932/leg/93246452
Validation #1
54
/ccus/734975456/hires/13464654/hires/h101442/journeys/59267932/leg/93246452
Validation #2
55
/ccus/734975456/hires/13464654/hires/h101442/journeys/59267932/leg/93246452
Validation #3
56
/ccus/734975456/hires/13464654/hires/h101442/journeys/59267932/leg/93246452
Validation #4
57
/ccus/734975456/hires/13464654/hires/h101442/journeys/59267932/leg/93246452
Implied Access Control and Confidentiality Constraints?
58
/ccus/734975456/hires/13464654/hires/h101442/journeys/59267932/leg/93246452
What's the Alternative?
/ccus/734975456
/hires/13464654
/hires/h101442
/journeys/59267932
/leg/93246452
59
https://www.flickr.com/photos/aspis7/5075169756
The things I wish I knew
a couple of years ago…
60
INCONVENIENT TRUTH #1:
GET calls are never nullipotent
61
https://www.flickr.com/photos/grantmac/4192158869
INCONVENIENT TRUTH #2:
HTTP Verbs ≠ “REST Verbs”
62
https://www.flickr.com/photos/grantmac/4192158869
INCONVENIENT TRUTH #3:
HTTP Response Codes ≠ “REST Response Codes”
63
https://www.flickr.com/photos/grantmac/4192158869
INCONVENIENT TRUTH #4:
HATEOAS YAGNI⇒
64
https://www.flickr.com/photos/grantmac/4192158869
INCONVENIENT TRUTH #5:
Hierarchical URIs will kill you in the end
65
https://www.flickr.com/photos/grantmac/4192158869
Thank You for Your Attention!
66
Contact information:
@filipvanlaenen
fvl@computas.com / f.a.vanlaenen@ieee.org
https://no.linkedin.com/in/filipvanlaenen
http://www.slideshare.net/filipvanlaenen/

More Related Content

What's hot

Introduction to Docker on AWS
Introduction to Docker on AWSIntroduction to Docker on AWS
Introduction to Docker on AWS
Amazon Web Services
 
HCL Nomad Mobile のご紹介 (2022年2月)
HCL Nomad Mobile のご紹介 (2022年2月)HCL Nomad Mobile のご紹介 (2022年2月)
HCL Nomad Mobile のご紹介 (2022年2月)
Software Info HCL Japan
 
【AWS初心者向けWebinar】AWSのプロビジョニングからデプロイまで
【AWS初心者向けWebinar】AWSのプロビジョニングからデプロイまで【AWS初心者向けWebinar】AWSのプロビジョニングからデプロイまで
【AWS初心者向けWebinar】AWSのプロビジョニングからデプロイまで
Amazon Web Services Japan
 
Oracle Analytics Cloud のご紹介【2021年3月版】
Oracle Analytics Cloud のご紹介【2021年3月版】Oracle Analytics Cloud のご紹介【2021年3月版】
Oracle Analytics Cloud のご紹介【2021年3月版】
オラクルエンジニア通信
 
Yeni başlayanlar i̇çin Oracle 12c
Yeni başlayanlar i̇çin Oracle 12cYeni başlayanlar i̇çin Oracle 12c
Yeni başlayanlar i̇çin Oracle 12c
Özgür Umut Vurgun
 
AWS Black Belt Online Seminar 2017 AWS X-Ray
AWS Black Belt Online Seminar 2017 AWS X-RayAWS Black Belt Online Seminar 2017 AWS X-Ray
AWS Black Belt Online Seminar 2017 AWS X-Ray
Amazon Web Services Japan
 
20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline
20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline
20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline
Amazon Web Services Japan
 
Oracle project costing
Oracle project costing Oracle project costing
Oracle project costing
Munir Ahmed
 
AWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS CognitoAWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS Cognito
Amazon Web Services Japan
 
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi YoshidaInsight Technology, Inc.
 
20200804 AWS Black Belt Online Seminar Amazon CodeGuru
20200804 AWS Black Belt Online Seminar Amazon CodeGuru20200804 AWS Black Belt Online Seminar Amazon CodeGuru
20200804 AWS Black Belt Online Seminar Amazon CodeGuru
Amazon Web Services Japan
 
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
NTT DATA OSS Professional Services
 
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
AWS Black Belt Online Seminar 2017 Amazon DynamoDB AWS Black Belt Online Seminar 2017 Amazon DynamoDB
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
Amazon Web Services Japan
 
VPC Reachability Analyzer 使って人生が変わった話
VPC Reachability Analyzer 使って人生が変わった話VPC Reachability Analyzer 使って人生が変わった話
VPC Reachability Analyzer 使って人生が変わった話
Noritaka Sekiyama
 
Oracle Database Vaultのご紹介
Oracle Database Vaultのご紹介Oracle Database Vaultのご紹介
Oracle Database Vaultのご紹介
オラクルエンジニア通信
 
01_2021年上半期 AWS IoT サービスアップデート
01_2021年上半期 AWS IoT サービスアップデート01_2021年上半期 AWS IoT サービスアップデート
01_2021年上半期 AWS IoT サービスアップデート
Amazon Web Services Japan
 
Oracle ebs db platform migration
Oracle ebs db platform migrationOracle ebs db platform migration
Oracle ebs db platform migration
maaz khan
 
AWS Black Belt Online Seminar 2017 AWS OpsWorks
AWS Black Belt Online Seminar 2017 AWS OpsWorksAWS Black Belt Online Seminar 2017 AWS OpsWorks
AWS Black Belt Online Seminar 2017 AWS OpsWorks
Amazon Web Services Japan
 
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
Amazon Web Services Japan
 
Kubernetes as a ServiceをProduction環境で2年活用し、直面してきた課題と解決策 / YJTC19 in Shibuya A...
Kubernetes as a ServiceをProduction環境で2年活用し、直面してきた課題と解決策 / YJTC19 in Shibuya A...Kubernetes as a ServiceをProduction環境で2年活用し、直面してきた課題と解決策 / YJTC19 in Shibuya A...
Kubernetes as a ServiceをProduction環境で2年活用し、直面してきた課題と解決策 / YJTC19 in Shibuya A...
Yahoo!デベロッパーネットワーク
 

What's hot (20)

Introduction to Docker on AWS
Introduction to Docker on AWSIntroduction to Docker on AWS
Introduction to Docker on AWS
 
HCL Nomad Mobile のご紹介 (2022年2月)
HCL Nomad Mobile のご紹介 (2022年2月)HCL Nomad Mobile のご紹介 (2022年2月)
HCL Nomad Mobile のご紹介 (2022年2月)
 
【AWS初心者向けWebinar】AWSのプロビジョニングからデプロイまで
【AWS初心者向けWebinar】AWSのプロビジョニングからデプロイまで【AWS初心者向けWebinar】AWSのプロビジョニングからデプロイまで
【AWS初心者向けWebinar】AWSのプロビジョニングからデプロイまで
 
Oracle Analytics Cloud のご紹介【2021年3月版】
Oracle Analytics Cloud のご紹介【2021年3月版】Oracle Analytics Cloud のご紹介【2021年3月版】
Oracle Analytics Cloud のご紹介【2021年3月版】
 
Yeni başlayanlar i̇çin Oracle 12c
Yeni başlayanlar i̇çin Oracle 12cYeni başlayanlar i̇çin Oracle 12c
Yeni başlayanlar i̇çin Oracle 12c
 
AWS Black Belt Online Seminar 2017 AWS X-Ray
AWS Black Belt Online Seminar 2017 AWS X-RayAWS Black Belt Online Seminar 2017 AWS X-Ray
AWS Black Belt Online Seminar 2017 AWS X-Ray
 
20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline
20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline
20201111 AWS Black Belt Online Seminar AWS CodeStar & AWS CodePipeline
 
Oracle project costing
Oracle project costing Oracle project costing
Oracle project costing
 
AWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS CognitoAWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS Cognito
 
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida
 
20200804 AWS Black Belt Online Seminar Amazon CodeGuru
20200804 AWS Black Belt Online Seminar Amazon CodeGuru20200804 AWS Black Belt Online Seminar Amazon CodeGuru
20200804 AWS Black Belt Online Seminar Amazon CodeGuru
 
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
 
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
AWS Black Belt Online Seminar 2017 Amazon DynamoDB AWS Black Belt Online Seminar 2017 Amazon DynamoDB
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
 
VPC Reachability Analyzer 使って人生が変わった話
VPC Reachability Analyzer 使って人生が変わった話VPC Reachability Analyzer 使って人生が変わった話
VPC Reachability Analyzer 使って人生が変わった話
 
Oracle Database Vaultのご紹介
Oracle Database Vaultのご紹介Oracle Database Vaultのご紹介
Oracle Database Vaultのご紹介
 
01_2021年上半期 AWS IoT サービスアップデート
01_2021年上半期 AWS IoT サービスアップデート01_2021年上半期 AWS IoT サービスアップデート
01_2021年上半期 AWS IoT サービスアップデート
 
Oracle ebs db platform migration
Oracle ebs db platform migrationOracle ebs db platform migration
Oracle ebs db platform migration
 
AWS Black Belt Online Seminar 2017 AWS OpsWorks
AWS Black Belt Online Seminar 2017 AWS OpsWorksAWS Black Belt Online Seminar 2017 AWS OpsWorks
AWS Black Belt Online Seminar 2017 AWS OpsWorks
 
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
 
Kubernetes as a ServiceをProduction環境で2年活用し、直面してきた課題と解決策 / YJTC19 in Shibuya A...
Kubernetes as a ServiceをProduction環境で2年活用し、直面してきた課題と解決策 / YJTC19 in Shibuya A...Kubernetes as a ServiceをProduction環境で2年活用し、直面してきた課題と解決策 / YJTC19 in Shibuya A...
Kubernetes as a ServiceをProduction環境で2年活用し、直面してきた課題と解決策 / YJTC19 in Shibuya A...
 

Viewers also liked

56民族中医药历史分类大百科数据库
56民族中医药历史分类大百科数据库56民族中医药历史分类大百科数据库
56民族中医药历史分类大百科数据库guestea4e3faa
 
Here At The End Banners
Here At The End BannersHere At The End Banners
Here At The End Banners
Jess Pestlin
 
Malaysia prohibited herbs simple draft
Malaysia prohibited herbs simple draftMalaysia prohibited herbs simple draft
Malaysia prohibited herbs simple draft
文雄 蕭
 
Work from home ramanthapur
Work from home  ramanthapurWork from home  ramanthapur
Work from home ramanthapur
rahimansow
 
Generalidades sobre helmintos
Generalidades sobre helmintosGeneralidades sobre helmintos
Generalidades sobre helmintos
Ricardo Antonio Rosales Garcia
 
(Sadn1013 h) kump 17
(Sadn1013 h) kump 17(Sadn1013 h) kump 17
(Sadn1013 h) kump 17sadn1013
 
CEREBRO
CEREBROCEREBRO
Helmintos
HelmintosHelmintos
Helmintos
Margie Rodas
 
Democracia
DemocraciaDemocracia
Que es? Como se creo? y Como Funciona Slideshare?
Que es? Como se creo? y Como Funciona Slideshare?Que es? Como se creo? y Como Funciona Slideshare?
Que es? Como se creo? y Como Funciona Slideshare?
Winland Casino
 
Ford Pinto_Ethics Case Study
Ford Pinto_Ethics Case StudyFord Pinto_Ethics Case Study
Ford Pinto_Ethics Case Study
Amy B Perrault
 
Questionnaire for cakes
Questionnaire for cakesQuestionnaire for cakes
Questionnaire for cakes
Rajesh Shetty
 

Viewers also liked (15)

56民族中医药历史分类大百科数据库
56民族中医药历史分类大百科数据库56民族中医药历史分类大百科数据库
56民族中医药历史分类大百科数据库
 
HITECH-Changes-to-HIPAA
HITECH-Changes-to-HIPAAHITECH-Changes-to-HIPAA
HITECH-Changes-to-HIPAA
 
Here At The End Banners
Here At The End BannersHere At The End Banners
Here At The End Banners
 
Malaysia prohibited herbs simple draft
Malaysia prohibited herbs simple draftMalaysia prohibited herbs simple draft
Malaysia prohibited herbs simple draft
 
Work from home ramanthapur
Work from home  ramanthapurWork from home  ramanthapur
Work from home ramanthapur
 
GreyZone
GreyZoneGreyZone
GreyZone
 
Generalidades sobre helmintos
Generalidades sobre helmintosGeneralidades sobre helmintos
Generalidades sobre helmintos
 
(Sadn1013 h) kump 17
(Sadn1013 h) kump 17(Sadn1013 h) kump 17
(Sadn1013 h) kump 17
 
AICP Exam Preparation
AICP Exam PreparationAICP Exam Preparation
AICP Exam Preparation
 
CEREBRO
CEREBROCEREBRO
CEREBRO
 
Helmintos
HelmintosHelmintos
Helmintos
 
Democracia
DemocraciaDemocracia
Democracia
 
Que es? Como se creo? y Como Funciona Slideshare?
Que es? Como se creo? y Como Funciona Slideshare?Que es? Como se creo? y Como Funciona Slideshare?
Que es? Como se creo? y Como Funciona Slideshare?
 
Ford Pinto_Ethics Case Study
Ford Pinto_Ethics Case StudyFord Pinto_Ethics Case Study
Ford Pinto_Ethics Case Study
 
Questionnaire for cakes
Questionnaire for cakesQuestionnaire for cakes
Questionnaire for cakes
 

Similar to Five Inconvenient Truths about REST

API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid Rahimian
API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid RahimianAPI Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid Rahimian
API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid Rahimian
Vahid Rahimian
 
WebApp #3 : API
WebApp #3 : APIWebApp #3 : API
WebApp #3 : API
Jean Michel
 
Together Cheerfully to Walk with Hypermedia
Together Cheerfully to Walk with HypermediaTogether Cheerfully to Walk with Hypermedia
Together Cheerfully to Walk with Hypermedia
Vladimir Tsukur
 
Best Practices in Api Design
Best Practices in Api DesignBest Practices in Api Design
Best Practices in Api Design
Muhammad Aamir ...
 
REST APIs for an Internet of Things
REST APIs for an Internet of ThingsREST APIs for an Internet of Things
REST APIs for an Internet of ThingsMichael Koster
 
REST APIs for the Internet of Things
REST APIs for the Internet of ThingsREST APIs for the Internet of Things
REST APIs for the Internet of ThingsMichael Koster
 
REST and Resource Oriented Architecture - okcDG March 2008
REST and Resource Oriented Architecture - okcDG March 2008REST and Resource Oriented Architecture - okcDG March 2008
REST and Resource Oriented Architecture - okcDG March 2008
Ryan Hoegg
 
Build your APIs with apigility
Build your APIs with apigilityBuild your APIs with apigility
Build your APIs with apigility
Christian Varela
 
Colloquim Report - Rotto Link Web Crawler
Colloquim Report - Rotto Link Web CrawlerColloquim Report - Rotto Link Web Crawler
Colloquim Report - Rotto Link Web Crawler
Akshay Pratap Singh
 
How to design a good REST API: Tools, techniques and best practices
How to design a good REST API: Tools, techniques and best practicesHow to design a good REST API: Tools, techniques and best practices
How to design a good REST API: Tools, techniques and best practices
WSO2
 
How to design a good rest api tools, techniques and best practices.
How to design a good rest api  tools, techniques and best practices.How to design a good rest api  tools, techniques and best practices.
How to design a good rest api tools, techniques and best practices.
Nuwan Dias
 
Rest
Rest Rest
A Look at OData
A Look at ODataA Look at OData
A Look at OData
Woodruff Solutions LLC
 
ReST
ReSTReST
Rest and beyond
Rest and beyondRest and beyond
Rest and beyond
Ming Yuan
 
Switch to Backend 2023 | Day 1 Part 1
Switch to Backend 2023 | Day 1 Part 1Switch to Backend 2023 | Day 1 Part 1
Switch to Backend 2023 | Day 1 Part 1
Google Developer Students Club NIT Silchar
 
From Linked Documentary Resources to Linked Computational Resources
From Linked Documentary Resources to Linked Computational ResourcesFrom Linked Documentary Resources to Linked Computational Resources
From Linked Documentary Resources to Linked Computational Resources
PhiloWeb
 
REST API Basics
REST API BasicsREST API Basics
REST API Basics
Tharindu Weerasinghe
 

Similar to Five Inconvenient Truths about REST (20)

API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid Rahimian
API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid RahimianAPI Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid Rahimian
API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid Rahimian
 
WebApp #3 : API
WebApp #3 : APIWebApp #3 : API
WebApp #3 : API
 
Together Cheerfully to Walk with Hypermedia
Together Cheerfully to Walk with HypermediaTogether Cheerfully to Walk with Hypermedia
Together Cheerfully to Walk with Hypermedia
 
Best Practices in Api Design
Best Practices in Api DesignBest Practices in Api Design
Best Practices in Api Design
 
REST APIs for an Internet of Things
REST APIs for an Internet of ThingsREST APIs for an Internet of Things
REST APIs for an Internet of Things
 
REST APIs for the Internet of Things
REST APIs for the Internet of ThingsREST APIs for the Internet of Things
REST APIs for the Internet of Things
 
REST and Resource Oriented Architecture - okcDG March 2008
REST and Resource Oriented Architecture - okcDG March 2008REST and Resource Oriented Architecture - okcDG March 2008
REST and Resource Oriented Architecture - okcDG March 2008
 
ReSTful API Final
ReSTful API FinalReSTful API Final
ReSTful API Final
 
Build your APIs with apigility
Build your APIs with apigilityBuild your APIs with apigility
Build your APIs with apigility
 
Colloquim Report - Rotto Link Web Crawler
Colloquim Report - Rotto Link Web CrawlerColloquim Report - Rotto Link Web Crawler
Colloquim Report - Rotto Link Web Crawler
 
How to design a good REST API: Tools, techniques and best practices
How to design a good REST API: Tools, techniques and best practicesHow to design a good REST API: Tools, techniques and best practices
How to design a good REST API: Tools, techniques and best practices
 
How to design a good rest api tools, techniques and best practices.
How to design a good rest api  tools, techniques and best practices.How to design a good rest api  tools, techniques and best practices.
How to design a good rest api tools, techniques and best practices.
 
Rest
Rest Rest
Rest
 
A Look at OData
A Look at ODataA Look at OData
A Look at OData
 
ReST
ReSTReST
ReST
 
Rest and beyond
Rest and beyondRest and beyond
Rest and beyond
 
Switch to Backend 2023 | Day 1 Part 1
Switch to Backend 2023 | Day 1 Part 1Switch to Backend 2023 | Day 1 Part 1
Switch to Backend 2023 | Day 1 Part 1
 
Webbasics
WebbasicsWebbasics
Webbasics
 
From Linked Documentary Resources to Linked Computational Resources
From Linked Documentary Resources to Linked Computational ResourcesFrom Linked Documentary Resources to Linked Computational Resources
From Linked Documentary Resources to Linked Computational Resources
 
REST API Basics
REST API BasicsREST API Basics
REST API Basics
 

More from Filip Van Laenen

Drawing for IT Architects
Drawing for IT ArchitectsDrawing for IT Architects
Drawing for IT Architects
Filip Van Laenen
 
How JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate OrbiterHow JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate Orbiter
Filip Van Laenen
 
How JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate OrbiterHow JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate Orbiter
Filip Van Laenen
 
Clouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp EdgesClouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp Edges
Filip Van Laenen
 
Become an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint ArchitectBecome an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint Architect
Filip Van Laenen
 
Dial M for Mutation
Dial M for MutationDial M for Mutation
Dial M for Mutation
Filip Van Laenen
 
Mutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kodeMutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kode
Filip Van Laenen
 
Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?
Filip Van Laenen
 
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
Filip Van Laenen
 
Oop 2015 – Mutation Testing
Oop 2015 – Mutation TestingOop 2015 – Mutation Testing
Oop 2015 – Mutation TestingFilip Van Laenen
 
#NoEstimates – Smidig 2014
 #NoEstimates – Smidig 2014 #NoEstimates – Smidig 2014
#NoEstimates – Smidig 2014Filip Van Laenen
 
#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014
Filip Van Laenen
 
Tre ubeleilige sannheter om REST
Tre ubeleilige sannheter om RESTTre ubeleilige sannheter om REST
Tre ubeleilige sannheter om REST
Filip Van Laenen
 
What Architects Really Do
What Architects Really DoWhat Architects Really Do
What Architects Really Do
Filip Van Laenen
 
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)Filip Van Laenen
 
Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?Filip Van Laenen
 
Mutation testing (OOP 2012, 2012-JAN-24)
Mutation testing (OOP 2012, 2012-JAN-24)Mutation testing (OOP 2012, 2012-JAN-24)
Mutation testing (OOP 2012, 2012-JAN-24)
Filip Van Laenen
 
SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)
Filip Van Laenen
 
SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)
Filip Van Laenen
 

More from Filip Van Laenen (19)

Drawing for IT Architects
Drawing for IT ArchitectsDrawing for IT Architects
Drawing for IT Architects
 
How JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate OrbiterHow JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate Orbiter
 
How JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate OrbiterHow JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate Orbiter
 
Clouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp EdgesClouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp Edges
 
Become an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint ArchitectBecome an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint Architect
 
Dial M for Mutation
Dial M for MutationDial M for Mutation
Dial M for Mutation
 
Mutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kodeMutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kode
 
Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?
 
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
 
Oop 2015 – Mutation Testing
Oop 2015 – Mutation TestingOop 2015 – Mutation Testing
Oop 2015 – Mutation Testing
 
#NoEstimates – Smidig 2014
 #NoEstimates – Smidig 2014 #NoEstimates – Smidig 2014
#NoEstimates – Smidig 2014
 
#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014
 
Tre ubeleilige sannheter om REST
Tre ubeleilige sannheter om RESTTre ubeleilige sannheter om REST
Tre ubeleilige sannheter om REST
 
What Architects Really Do
What Architects Really DoWhat Architects Really Do
What Architects Really Do
 
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
 
Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?
 
Mutation testing (OOP 2012, 2012-JAN-24)
Mutation testing (OOP 2012, 2012-JAN-24)Mutation testing (OOP 2012, 2012-JAN-24)
Mutation testing (OOP 2012, 2012-JAN-24)
 
SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)
 
SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)
 

Recently uploaded

Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 

Recently uploaded (20)

Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 

Five Inconvenient Truths about REST

  • 1. FIVE INCONVENIENT TRUTHS ABOUT REST Filip van Laenen 1 https://www.flickr.com/photos/grantmac/4192158869
  • 2. Who Am I? 2 ● 18 years of experience as a developer/architect ● Been involved in a number of REST projects – Client/consumer – Server/producer ● Things I wish I knew a couple of years ago… http://www.slideshare.net/filipvanlaenen/
  • 3. REST – Representational state transfer 3 From Wikipedia: “Representational State Transfer (REST) is a software architecture style for building scalable web services. REST gives a coordinated set of constraints to the design of components in a distributed hypermedia system that can lead to a higher performing and more maintainable architecture.”
  • 4. REST – Representational state transfer 4 From Wikipedia: “RESTful systems typically, but not always, communicate over the Hypertext Transfer Protocol with the same HTTP verbs (GET, POST, PUT, DELETE, etc.) which web browsers use to retrieve web pages and to send data to remote servers. REST interfaces usually involve collections of resources with identifiers, for example /people/paul, which can be operated upon using standard verbs, such as DELETE /people/paul.”
  • 6. So, what's wrong with REST? 6
  • 7. Ever Heared a REST-Discussion about “State”? 7
  • 8. Ever Heared a REST-Discussion about “State”? 8 From Wikipedia: “The client–server communication is constrained by no client context being stored on the server between requests.”
  • 9. INCONVENIENT TRUTH #1: GET calls are never nullipotent 9 https://www.flickr.com/photos/grantmac/4192158869
  • 11. What does «nullipotent» mean? 11 From Wikipedia: “The GET method is a safe method (or nullipotent), meaning that calling it produces no side-effects.”
  • 12. What does «nullipotent» mean? 12 From Wikipedia: “The GET method is a safe method (or nullipotent), meaning that calling it produces no side-effects.”
  • 14. Wanted Side-effects ● Access log from a REST resource ● Access control – Three strikes and you're out ● One-time downloads – Think “Snapchat” 14
  • 15. GET Methods with Side-effects Are OK 15 …if the side-effects are: ● General good practices ● Part of the domain
  • 16. GET Methods with Side-effects Are OK 16 …if the side-effects are: ● General good practices ● Part of the domain In other words: ● Unobservable ● Expected
  • 17. INCONVENIENT TRUTH #2: HTTP Verbs ≠ “REST Verbs” 17 https://www.flickr.com/photos/grantmac/4192158869
  • 21. HTTP/1.1 Spec about POST and PUT 21 The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI.
  • 22. HTTP/1.1 Spec about POST and PUT 22 The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI.
  • 23. HTTP/1.1 Spec about POST and PUT 23 The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI.
  • 24. HTTP/1.1 Spec about POST and PUT 24 The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI.
  • 26. INCONVENIENT TRUTH #3: HTTP Response Codes ≠ “REST Response Codes” 26 https://www.flickr.com/photos/grantmac/4192158869
  • 28. Martin Fowler on HATEOAS 28 “The key elements that are supported by the existence of the web are the strong separation between safe (eg GET) and non-safe operations, together with using status codes to help communicate the kinds of errors you run into.” http://martinfowler.com/articles/richardsonMaturityModel.html
  • 32. What If Something Else Is Wrong? 32 Semantical errors, but syntactically correct: ● References to resources that don't exist ● Illegal values ● Invalid combination of choices ● Anything else that doesn't make sense in your domain
  • 34. 422 Unprocessable Entity 34 From IETF RFC 4918: “The 422 (Unprocessable Entity) status code means the server understands the content type of the request entity (hence a 415 (Unsupported Media Type) status code is inappropriate), and the syntax of the request entity is correct (thus a 400 (Bad Request) status code is inappropriate) but was unable to process the contained instructions. For example, this error condition may occur if an XML request body contains well-formed (i.e., syntactically correct), but semantically erroneous, XML instructions.” https://tools.ietf.org/html/rfc4918#section-11.2
  • 36. INCONVENIENT TRUTH #4: HATEOAS YAGNI⇒ 36 https://www.flickr.com/photos/grantmac/4192158869
  • 38. HATEOAS 38 Hypermedia as the engine of application state From Wikipedia: “Clients make state transitions only through actions that are dynamically identified within hypermedia by the server. Except for simple fixed entry points to the application, a client does not assume that any particular action is available for any particular resources beyond those described in representations previously received from the server.”
  • 39. Example Message 39 <Hire id="h101442"> <CcuId>141705</CcuId> <EnclosingHireIds> <EnclosingHireId distance="1">a1</EnclosingHireId> </EnclosingHireIds> <OrgNo>123456789</OrgNo> <GlnLocation>1234567890123</GlnLocation> <StartDate>2013-10-09</StartDate> <EndDate>2013-11-08</EndDate> <Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/> <Link href="/ccus/141705" method="get" rel="Ccu"/> <Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/> </Hire>
  • 40. Example Message 40 <Hire id="h101442"> <CcuId>141705</CcuId> <EnclosingHireIds> <EnclosingHireId distance="1">a1</EnclosingHireId> </EnclosingHireIds> <OrgNo>123456789</OrgNo> <GlnLocation>1234567890123</GlnLocation> <StartDate>2013-10-09</StartDate> <EndDate>2013-11-08</EndDate> <Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/> <Link href="/ccus/141705" method="get" rel="Ccu"/> <Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/> </Hire>
  • 41. Example Message 41 <Hire id="h101442"> <CcuId>141705</CcuId> <EnclosingHireIds> <EnclosingHireId distance="1">a1</EnclosingHireId> </EnclosingHireIds> <OrgNo>123456789</OrgNo> <GlnLocation>1234567890123</GlnLocation> <StartDate>2013-10-09</StartDate> <EndDate>2013-11-08</EndDate> <Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/> <Link href="/ccus/141705" method="get" rel="Ccu"/> <Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/> </Hire> 199 out of 477 bytes (42%)
  • 42. Example Message using Full HATEOAS 42 <Hire id="h101442"> <CcuId>141705</CcuId> <EnclosingHireIds> <EnclosingHireId distance="1">a1</EnclosingHireId> </EnclosingHireIds> <OrgNo>123456789</OrgNo> <GlnLocation>1234567890123</GlnLocation> <StartDate>2013-10-09</StartDate> <EndDate>2013-11-08</EndDate> <Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/> <Link href="/ccus/141705" method="get" rel="Ccu"/> <Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/> <Link href="/organizations/123456789" method="get" rel="Organization"/> <Link href="/organizations/123456789/locations/1234567890123" method="get" rel="Location"/> <Link href="/ccus/141705/hires/a1/hires/h101442/documents" method="post" rel="Documents"/> <Link href="/ccus/141705/hires/a1/hires/h101442" method="put" rel="update"/> <Link href="/ccus/141705/hires/a1/hires/h101442/hires" method="post" rel="addHire"/> </Hire> 620 out of 899 bytes (69%)
  • 43. Martin Fowler on HATEOAS 43 “One obvious benefit of hypermedia controls is that it allows the server to change its URI scheme without breaking clients. As long as clients look up the ‘addTest’ link URI then the server team can juggle all URIs other than the initial entry points.” http://martinfowler.com/articles/richardsonMaturityModel.html
  • 44. Martin Fowler on HATEOAS 44 “A further benefit is that it helps client developers explore the protocol. The links give client developers a hint as to what may be possible next. It doesn't give all the information: both the “latest” and “cancel” controls point to the same URI – they need to figure out that one is a GET and the other a DELETE. But at least it gives them a starting point as to what to think about for more information and to look for a similar URI in the protocol documentation.” http://martinfowler.com/articles/richardsonMaturityModel.html
  • 45. Cost/Benefit of HATEOAS What will change most often? ● Behavior ● Content ● URIs What's hard to refactor? ● Behavior ● Content ● URIs 45
  • 46. Example Message 46 <Hire id="h101442"> <CcuId>141705</CcuId> <EnclosingHireIds> <EnclosingHireId distance="1">b2</EnclosingHireId> <EnclosingHireId distance="2">a1</EnclosingHireId> </EnclosingHireIds> <OrgNo>123456789</OrgNo> <GlnLocation>1234567890123</GlnLocation> <StartDate>2013-10-09</StartDate> <EndDate>2013-11-08</EndDate> <Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/> <Link href="/ccus/141705" method="get" rel="Ccu"/> <Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/> <Link href="/organizations/123456789" method="get" rel="Organization"/> <Link href="/organizations/123456789/locations/1234567890123" method="get" rel="Location"/> <Link href="/ccus/141705/hires/a1/hires/h101442/documents" method="post" rel="Documents"/> <Link href="/ccus/141705/hires/a1/hires/h101442" method="put" rel="update"/> <Link href="/ccus/141705/hires/a1/hires/h101442/hires" method="post" rel="addHire"/> </Hire>
  • 47. Example Message 47 <Hire id="h101442"> <CcuId>141705</CcuId> <EnclosingHireIds> <EnclosingHireId distance="1">b2</EnclosingHireId> <EnclosingHireId distance="2">a1</EnclosingHireId> </EnclosingHireIds> <OrgNo>123456789</OrgNo> <GlnLocation>1234567890123</GlnLocation> <StartDate>2013-10-09</StartDate> <EndDate>2013-11-08</EndDate> <Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/> <Link href="/ccus/141705" method="get" rel="Ccu"/> <Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/> <Link href="/organizations/123456789" method="get" rel="Organization"/> <Link href="/organizations/123456789/locations/1234567890123" method="get" rel="Location"/> <Link href="/ccus/141705/hires/a1/hires/h101442/documents" method="post" rel="Documents"/> <Link href="/ccus/141705/hires/a1/hires/h101442" method="put" rel="update"/> <Link href="/ccus/141705/hires/a1/hires/h101442/hires" method="post" rel="addHire"/> </Hire>
  • 48. HATEOAS 48 ● Uses a lot of bandwidth ● To avoid refactoring something that's easy to refactor ● Infrequent changes ● YAGNI (You aren't gonna need it)
  • 49. INCONVENIENT TRUTH #5: Hierarchical URIs will kill you in the end 49 https://www.flickr.com/photos/grantmac/4192158869
  • 51. Example Message 51 <Hire id="h101442"> <CcuId>141705</CcuId> <EnclosingHireIds> <EnclosingHireId distance="1">b2</EnclosingHireId> <EnclosingHireId distance="2">a1</EnclosingHireId> </EnclosingHireIds> <OrgNo>123456789</OrgNo> <GlnLocation>1234567890123</GlnLocation> <StartDate>2013-10-09</StartDate> <EndDate>2013-11-08</EndDate> <Link href="/ccus/141705/hires/a1/hires/h101442" method="get" rel="self"/> <Link href="/ccus/141705" method="get" rel="Ccu"/> <Link href="/ccus/141705/hires/a1" method="get" rel="EnclosingHire"/> <Link href="/organizations/123456789" method="get" rel="Organization"/> <Link href="/organizations/123456789/locations/1234567890123" method="get" rel="Location"/> <Link href="/ccus/141705/hires/a1/hires/h101442/documents" method="post" rel="Documents"/> <Link href="/ccus/141705/hires/a1/hires/h101442" method="put" rel="update"/> <Link href="/ccus/141705/hires/a1/hires/h101442/hires" method="post" rel="addHire"/> </Hire>
  • 52. Composition ● A hire on an asset cannot exist without the asset ● A subhire on a superhire cannot exist without the superhire ● A journey during a hire cannot exist without the hire ● Etc… 52 https://www.flickr.com/photos/aspis7/5075169756
  • 58. Implied Access Control and Confidentiality Constraints? 58 /ccus/734975456/hires/13464654/hires/h101442/journeys/59267932/leg/93246452
  • 60. The things I wish I knew a couple of years ago… 60
  • 61. INCONVENIENT TRUTH #1: GET calls are never nullipotent 61 https://www.flickr.com/photos/grantmac/4192158869
  • 62. INCONVENIENT TRUTH #2: HTTP Verbs ≠ “REST Verbs” 62 https://www.flickr.com/photos/grantmac/4192158869
  • 63. INCONVENIENT TRUTH #3: HTTP Response Codes ≠ “REST Response Codes” 63 https://www.flickr.com/photos/grantmac/4192158869
  • 64. INCONVENIENT TRUTH #4: HATEOAS YAGNI⇒ 64 https://www.flickr.com/photos/grantmac/4192158869
  • 65. INCONVENIENT TRUTH #5: Hierarchical URIs will kill you in the end 65 https://www.flickr.com/photos/grantmac/4192158869
  • 66. Thank You for Your Attention! 66 Contact information: @filipvanlaenen fvl@computas.com / f.a.vanlaenen@ieee.org https://no.linkedin.com/in/filipvanlaenen http://www.slideshare.net/filipvanlaenen/