Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3...
Transcript of Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3...
![Page 1: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/1.jpg)
1
![Page 2: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/2.jpg)
2
Web APIs that Developers Love
Kai Spichale @kspichale
![Page 3: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/3.jpg)
3
Client Implementation
Decoupling from implementation
Operations with input and output
Integration & reuse
API
Communication among developers
![Page 4: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/4.jpg)
Developer Perspective
► APIs are intended for developers ► Use standard HTTP ► Document precisely & with examples
4
?
![Page 5: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/5.jpg)
URI Design for Web APIs
5
![Page 6: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/6.jpg)
Unique identifier of resources /answers/42 Could be cryptic /xc487xdjfngx71dd Client should not create links by himself Server provides links
6
![Page 7: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/7.jpg)
Hypermedia links (HATEOAS)
"links": [ {
"href": "https://api.sandbox.paypal.com/v1/
payments/payment/PAY-2XR80EBWOSA",
"rel": "self",
"method": "GET"
}
]
7
![Page 8: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/8.jpg)
Should You Care about URI Design?
No! REST does not require proper URI design Yes! Many so-called „REST“ APIs ignore hypermedia Readable URIs help developers to understand the API
8
![Page 9: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/9.jpg)
Advantages of URI Design
Readable https://api.github.com/users/mojombo/followers
Hackable https://api.github.com/users
https://api.github.com/users/kspichale Stable No broken links HTTP 301 «Moved Permanently»
9
![Page 10: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/10.jpg)
Best Practices for URIs
Short Easier to read Abbreviations can be counterproductive
Consistent Patterns, names, case
Plural nouns Strict lowercase Hyphen
10
![Page 11: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/11.jpg)
Don’t Be Dogmatic – Pseudo File Endings
http://www.ics.uci.edu/~fielding/pubs/↵ dissertation/top.htm
http://userstream.twitter.com/1.1/user.json(There is no content negotiation anyway.)
11
File of a web app
Resource of a Web API
![Page 12: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/12.jpg)
Don’t Be Dogmatic – Trailing Slashes
/foo/bar Unix file
/foo/bar/ Unix directory
/books/
/books/42
/books/42/chapters
/books/42/chapters/1
12
Be consistent: Avoid trailing
slahses
![Page 13: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/13.jpg)
Don’t Be Dogmatic – Trailing Slashes
Directory resource / Provides navigation links to begin the interaction with the API http://api.example.com/ vs. http://api.example.com
13
Typical mistake
![Page 14: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/14.jpg)
1:* Relations
Hierarchical URI pattern :collection/:item/:sub-collection/:sub-item
POST /groups/g1/persons
GET /groups/g1/persons/p1
DELETE /groups/g1/persons/p1
14
Group Person * 1
![Page 15: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/15.jpg)
n:m Relations
GET /groups/g1
{
"id": "p1",
"persons": ["p1", "p2"]
}
GET /persons/p1
{
"id": "g1",
"groups": ["g1", "g2"]
}
15
Group Person * *
Caching?
Which one is leading?
![Page 16: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/16.jpg)
n:m Relations with Subscriptions
POST /memberships
{
"person_id": "p1",
"group_id": "g1",
}
GET /membership/mem-p1-g1
DELETE /membership/mem-p1-g1
16
Group Person * *
Caching!
Atomicity!
Additional properties!
Membership
![Page 17: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/17.jpg)
Best Practices for IDs – Prefixes
Makes URI more readable /agents/007 vs. /agents/agent007/persons/83j9x vs. /persons/per-83j9x
https://jira.spring.io/browse/DATAREST-516
17
![Page 18: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/18.jpg)
Best Practices for IDs – Sequential IDs
https://jira.spring.io/browse/DATAREST-516
Guessable (advantage): There must be a ticket 515 Hackable (advantage): Quick navigation to another ticket
18
![Page 19: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/19.jpg)
Best Practices for IDs – Sequential IDs
http://api.super-kewl-app.com/users/u-314
Guessable (disadvantage): There must be 313 other users Hackable (disadvantage): Potential security issue No 1:1 relation between database key and public ID
19
![Page 20: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/20.jpg)
Best Practices for IDs – Slug IDs
http://stackoverflow.com/questions/47427/why↵
-do-some-websites-add-slugs-to-the-end-of-urls
Natural key Created by URL encoding Search Engine Optimization Read content in link before clicking on it
20
![Page 21: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/21.jpg)
Partial Responses
21
![Page 22: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/22.jpg)
Partial Responses – Paging
GET /products?page=1&count=5↵ &sort-by=id&order=desc
22
Product 10 Product 09 Product 08 Product 07 Product 06 Product 05 Product 04 Product 03 Product 02 Product 01
GET /products?page=2&count=5↵ &sort-by=id&order=desc
![Page 23: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/23.jpg)
Partial Responses – Web Linking (RFC5899)
"links": [ { "href": "http://api.example.com/products?page=1&count=5", "rel": [ "previous“ ], "method": "GET" }, { "href": "http://api.example.com/products?page=2&count=5", "rel": [ "self" ], "method": "GET" }, { "href": "http://api.example.com/products?page=3&count=5", "rel": [ "next" ], "method": "GET" } ]
23
![Page 24: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/24.jpg)
Partial Responses – Web Linking (RFC5899)
"links": [ { "href": "http://api.example.com/products?page=1&count=5", "rel": [ “first“ ], "method": "GET" }, { "href": "http://api.example.com/products?page=23&count=5", "rel": [ “last" ], "method": "GET" } ]
24
![Page 25: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/25.jpg)
Partial Responses – Streams of Data
page=1 count=5
25
Message 10 Message 09 Message 08 Message 07 Message 06 Message 05 Message 04 Message 03 Message 02 Message 01
processed
Message 12 Message 11 Message 10 Message 09 Message 08 Message 07 Message 06 Message 05 Message 04 Message 03 Message 02 Message 01
![Page 26: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/26.jpg)
Partial Responses – Streams of Data
26
Message 12 Message 11 Message 10 Message 09 Message 08 Message 07 Message 06 Message 05 Message 04 Message 03 Message 02 Message 01
page=2 count=5
Message 12 Message 11 Message 10 Message 09 Message 08 Message 07 Message 06 Message 05 Message 04 Message 03 Message 02 Message 01
page=2 count=5
![Page 27: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/27.jpg)
Partial Responses – Cursoring
count=5
27
Message 10 Message 09 Message 08 Message 07 Message 06 Message 05 Message 04 Message 03 Message 02 Message 01
processed
Message 12 Message 11 Message 10 Message 09 Message 08 Message 07 Message 06 Message 05 Message 04 Message 03 Message 02 Message 01
count=5 max_id=5
![Page 28: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/28.jpg)
Partial Responses – Cursoring
28
Message 18 Message 17 Message 16 Message 15 Message 14 Message 13 Message 12 Message 11 Message 10 ... Message 02 Message 01
processed
count=5 since_id=10
Message 18 Message 17 Message 16 Message 15 Message 14 Message 13 Message 12 Message 11 Message 10 ... Message 02 Message 01
processed
processed
count=5 since_id=10 max_id=13
![Page 29: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/29.jpg)
Siren – Embedding vs. Linking
{ _links": { "self": { "href": "/books/42" }, "author": { "href": "/people/douglas-adams"} }}
Client may resolve links to sub-entities
29
![Page 30: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/30.jpg)
Siren – Embedding vs. Linking
{ "_links": { "self": { "href": "/books/42" }, "author": { "href”: "/people/douglas-adams”} }, "_embedded": { "author": { "_links": { "self”: { "href": "/people/douglas-adams” } }, "name": "Douglas Noel Adams", "born": "March 11, 1952”, "died": "May 11, 2001" } }}
30
![Page 31: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/31.jpg)
GraphQL – A Data-Fetching API
A GraphQL query is sent as a string to a server to define the shape of the returned representation Developed by Facebook http://graphql.org Strongly typed
31
![Page 32: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/32.jpg)
GraphQL – A Data-Fetching API
{ author(id:douglas-adams) { name }} Server can return exactly what a client asks for and no more: { "author": { "name": "Douglas Noel Adams" }}
32
![Page 33: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/33.jpg)
GraphQL Selections
Fields { id firstname lastname}
33
Complex Data { releaseDate { month year }}
Arguments { book(id:42) { id title coverPic(size:100) }}
![Page 34: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/34.jpg)
GraphQL Selections
Using the spread operator (...) and fragments fragment bookFields on Book { id title coverPic(size:100)}
query bookQuery { book(id:42) { ...bookFields }}
34
![Page 35: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/35.jpg)
GraphQL Mutations
Mutation { likeBook(bookId: 42) { book { name likeCount } }}
35
![Page 36: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/36.jpg)
API Changes
GET /books/42
Response:{
"id": 42,"title": "The Hitchhiker's Guide to↵
the Galaxy","price": "7.95"
}
36
![Page 37: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/37.jpg)
API Changes
GET /books/42
Response:{
"id": 42,"title": "The Hitchhiker's Guide to↵
the Galaxy","bruttoPrice": "7,95",
"nettoPrice": "6,12"}
37
![Page 38: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/38.jpg)
API Changes
GET /books/42
Response:{
"id": 42,"title": "The Hitchhiker's Guide to↵
the Galaxy","price": "7.95“,"bruttoPrice": "7,95",
"nettoPrice": "6,12"}
38
![Page 39: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/39.jpg)
GraphQL Introspection API
GET /books/42query BookIntrospection { __type(name: "Book") { name fields(includeDeprecated: true) { name isDeprecated deprecationReason } }}
39
![Page 40: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/40.jpg)
GraphQL Introspection API { "data": { "__type": { "name": "Book", "fields": [ { "name": "id", "isDeprecated": false, "deprecationReason": null }, { "name": "price", "isDeprecated": true, "deprecationReason”: "Use ‘bruttoPrice’ instead." },40
![Page 41: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/41.jpg)
Compatible Extension
Old client:
query bookQuery { book(id:42) { id title price }}
41
New client:
query bookQuery { book(id:42) { id title bruttoPrice }}
![Page 42: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/42.jpg)
Data Versioning vs.
Language Versioning
42
![Page 43: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/43.jpg)
Backward compatibility USB 3.0 ports support USB 2.0 sticks Forward compatibility USB 2.0 ports support USB 3.0 sticks
43
![Page 44: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/44.jpg)
Consumer
Producer
Backward compatibilty
• Lookup version identifiers • Replacement or side-by-side
• Version notification
Forward compatibility
• Must accept unknowns • Must preserve unknowns
(if persisting state) • Version identifier
substitution model
• Media type spec defines consumer forward compatibility expectations (extension areas)
Incompatibility • Check for version identifier
• Side-by-side or breaking replacement
44
http://www.stucharlton.com/blog/archives/000589.html http://www.w3.org/2001/tag/doc/versioning-compatibility-strategies#iddiv2125080648
![Page 45: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/45.jpg)
Backward Compatibility
Adding new resources and HTTP methods Extensible data formats Requests: new optional elements can be omitted by clients Responses: new elements can be problematic for clients
45
Forward compatibility
![Page 46: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/46.jpg)
Forward Compatibility
Postel’s law (robustness principle) "Be conservative in what you send, be liberal in what you accept."
46
![Page 47: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/47.jpg)
Error Handling
47
![Page 48: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/48.jpg)
Black box from user‘s perspective Common problems: Error tunneling through 200 «OK» Generic 500 «Internal Server Error»
48
HTTP status codes 1xx Informational 4xx Client Error 2xx Success 5xx Server Error 3xx Redirection
![Page 49: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/49.jpg)
Most Common HTTP Error Codes
400 «Bad Request» 500 «Internal Server Error» 404 «Not Found» 503 «Service Unavailable» 403 «Forbidden» 504 «Gateway Timeout»
49
![Page 50: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/50.jpg)
Proprietary Error Codes
Twitter API { "errors“ : [ { "message“ : "Sorry, that page does not↵ exist", "code“ : 34 } ] }
50
![Page 51: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/51.jpg)
https://dev.twitter.com/overview/api/response-codes
51
![Page 52: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/52.jpg)
Twilio API { "status": 400, "message": "No 'To' number is specified", "code": 21201, "more_info": "http://www.twilio.com/docs/↵ errors/21201" }
52
Proprietary Error Codes
![Page 53: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/53.jpg)
https://www.twilio.com/docs/api/errors/21201
53
![Page 54: Web APIs that - gotocon.com€¦ · Web APIs that Developers Love Kai Spichale @kspichale . 3 Client Implementation Decoupling from ... REST does not require proper URI design Yes!](https://reader034.fdocuments.net/reader034/viewer/2022042300/5eca7b9703de2c4cd02dc330/html5/thumbnails/54.jpg)
54
Kai Spichale @kspichale