HATEOAS API: Difference between revisions
Jump to navigation
Jump to search
(Add Concurrency Support) |
|||
Line 22: | Line 22: | ||
!! style="writing-mode: vertical-rl;" | URL as Identifier | !! style="writing-mode: vertical-rl;" | URL as Identifier | ||
!! style="writing-mode: vertical-rl;" | Stable Pagination | !! style="writing-mode: vertical-rl;" | Stable Pagination | ||
!! style="writing-mode: vertical-rl;" | Concurrency Support | |||
|- | |- | ||
| HATEOAS || style="background:#fdffb6"|? || style="background:#caffbf"|Yes || style="background:#fdffb6"|? || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#fdffb6"|? | | HATEOAS || style="background:#fdffb6"|? || style="background:#caffbf"|Yes || style="background:#fdffb6"|? || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#fdffb6"|? || style="background:#caffbf"|Yes | ||
|- | |- | ||
| [https://github.com/XPBytes/media_types-serialization media_types-serialization] (HATEOAS) || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes | | [https://github.com/XPBytes/media_types-serialization media_types-serialization] (HATEOAS) || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#fdffb6"|? | ||
|- | |- | ||
| [https://docs.github.com/en/free-pro-team@latest/rest/overview/resources-in-the-rest-api Github] (REST) || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes | | [https://docs.github.com/en/free-pro-team@latest/rest/overview/resources-in-the-rest-api Github] (REST) || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#ffadad"|No | ||
|- | |- | ||
| [https://opensource.zalando.com/restful-api-guidelines/#114 Zalando] || style="background:#ffadad"|No || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#fdffb6"|? || style="background:#caffbf"|Yes | | [https://opensource.zalando.com/restful-api-guidelines/#114 Zalando] || style="background:#ffadad"|No || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#fdffb6"|? || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes | ||
|- | |- | ||
| [https://developers.facebook.com/docs/graph-api/overview Facebook Graph API] || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#fdffb6"|? | | [https://developers.facebook.com/docs/graph-api/overview Facebook Graph API] || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#fdffb6"|? || style="background:#ffadad"|No | ||
|- | |- | ||
| [https://shopify.dev/docs/admin-api/rest Shopify] (REST) || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#caffbf"|Yes | | [https://shopify.dev/docs/admin-api/rest Shopify] (REST) || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#caffbf"|Yes || style="background:#ffadad"|No | ||
|- | |- | ||
| GraphQL || style="background:#ffadad"|No || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#caffbf"|Yes | | GraphQL || style="background:#ffadad"|No || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#ffadad"|No || style="background:#caffbf"|Yes || style="background:#ffadad"|No || style="background:#caffbf"|Yes || style="background:#ffadad"|No | ||
|} | |} | ||
[[Category: Terminology]] | [[Category: Terminology]] |
Revision as of 10:04, 14 January 2021
Originally called REST, HATEOAS is a way of designing HTTP APIs as described in Roy Fieldings thesis. The acronym stands for Hypermedia as the Engine of Application State.
It distinguishes itself from other APIs by having the following properties:
- Heavy use of Media Types to allow Backward Compatibility.
- It does not allow clients to construct URLs (unless instructed by the server to do so) to allow for applications to change their URL structure.
- Other than an entry URL and a set of documents describing the Media Types, no additional knowledge should be necessary to use the API.
HATEOAS APIs usually make heavy use of HTTP features like:
- Caching to enable the application to scale better.
- Content Negotiation to support older clients and give users localized versions of resources.
- Conditional PUTs to add Optimistic Concurrency.
Comparison
Method | Browser Accessible | Backward Compatible | Backward Compatible (default) | HTTP Cachable | No URL Construction | URL as Identifier | Stable Pagination | Concurrency Support |
---|---|---|---|---|---|---|---|---|
HATEOAS | ? | Yes | ? | Yes | Yes | Yes | ? | Yes |
media_types-serialization (HATEOAS) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? |
Github (REST) | Yes | Yes | No | No | Yes | Yes | Yes | No |
Zalando | No | Yes | Yes | No | No | ? | Yes | Yes |
Facebook Graph API | Yes | Yes | Yes | No | No | No | ? | No |
Shopify (REST) | Yes | Yes | Yes | No | No | No | Yes | No |
GraphQL | No | Yes | No | No | Yes | No | Yes | No |