Upload
artem-bey
View
876
Download
0
Embed Size (px)
Citation preview
REST и HATEOAS
1
REST и HATEOAS
2
Доклад не из будущего
Артём Бей @defly_selfFullstack dev в Trinity Mirror
3
REST != HTTP
Representational State Transfer"Architectural Styles and
the Design of Network-based Software Architectures” Roy Fielding
5
REST — это архитектурный стиль для распределенных гипермедиа систем.
6
Ресурс
http://…/resource
<xml><entity/>
</xml>
{entity:{…}
}
7
http://…/resource
<xml><entity/>
</xml>
{entity:{…}
}
представление
представление
ресурс
идентификатор
документкартинкапроцесс…
8
Richardson Maturity Model
9
REST уровня 0POST/api
{"do":"createOrder","params":{"count":2}}
POST/api
{"do":"cancelOrder","params":{"id":"34xzfha834flksd34"}}
200OK
{"success":true,"res":{"id":"f239sdk237sdf438"}}
200OK
{"success":false,"error":{"code":666,"message":"becausefkuthatswhy"}}
/api
10
REST уровня 1POST/users
{…}
200OK
{"success":true,"res":{"id":"f239sdk237sdf438"}}
200OK
{"success":false,"error":{"code":40000,"message":"todayis
abadday"}}
/users
POST/users/1
{…}
POST/orders
{…}
/users/1
/orders
11
TeslaModelSиспользуетRESTLevel1
REST уровня 2
13
REST уровня 2Используем HTTP по спецификации
14
МетодыGETPOSTPUT
DELETEOPTIONSHEADPATCH…
15
16
200OK
{"success":false,"error":{"code":666,"message":"becausefkuthatswhy"}
17
400BadRequest401Unauthorized404NotFound402PaymentRequired409Conflict…
18
418 I’m a teapot
19
Forbidden
Authorization:BearerToKeN
@wice_
/users/orders/profile
…
GETPOSTPUT
DELETEOPTIONSHEADPATCH
…
200201…
300301…
400401…
500501…
покроет все ваши кейсы
23
REST уровень 3
24
Гипертекст
25
HATEOASHypermedia As The Engine Of Application State
26
представлениересурса=данные+контролы
27
GET/feed
200OK
{"data":[{"title":"...","links":{"details":"http://..."}},....],"links":{"self":"http://...","first":"http://...","prev":"http://...","next":"http://...","last":"http://..."}}
28
GET/feed?min_id=100500
200OK
{"data":[{"title":"...","links":{"details":“http://..."}},....],"links":{"self":"http://...","first":"http://...","prev":"http://...","next":"http://...","last":"http://..."}}
29
GET/films/themartian
200OK
{"data":{"title":"Марсианин","description":"КакМэтДэймонвыращивалкартошкунаМарсе","duration":140,"poster":"https://s3.amazon.com/buckets/23aGd23asdsf.png"},"links":{"self":“http://.../themartian”,"booking":“http://.../themartian/bookings"}}
30
GET/films/themartian
200OK
{"data":{"title":"Марсианин","description":"КакМэтДэймонвыращивалкартошкунаМарсе","duration":140,"poster":"https://s3.amazon.com/buckets/23aGd23asdsf.png"},"links":{"self":“http://.../themartian”,
"booking":“http://.../themartian/bookings"}}
OPTIONS/films/themartian/bookings
204NoContent
Allow:HEAD,GET,POST,OPTIONS
31
POST/films/themartian/bookings
{count:3
}
201Created
Location:http://..../bookings/1
32
GET/films/themartian/bookings/1
200OK
{"data":{"count":3,"date":"TueNov03201521:45:55GMT+0200(EET)","status":"waiting"},"links":{"self":"http://..../bookings/1","cancel":"http://..../bookings/1/cancel","pay":"http://.../bookings/1/pay"}}
33
Стейт-машинаПереходим в новые состояния по ссылке
34
Некоторые приёмы• Безопасные и идемпотентные операции
• Кеширование неизменяемых ресурсов
• X- заголовки
• Вендорные типы данных (application/vnd.myapi.basket.v1+json)
35
В чём профит?
36
Делаем клиент тоньше, не нужно больше хачить URL
Распределённые приложения
API могут использовать роботы
Самодокументирование
Developer Experience
Вопросы к HATEOAS
42
В JSON нет ссылок и форм.
Есть спецификации: HAL, Siren, json:api
43
Нужна ли теперь документация?
Нужна. REST для машин.
44
Слишком академично или много лишнего.
Не нужно реализовывать спецификации в полном
объёме.
45
А Twitter, Facebook, … не применяют HATEOAS.
Run-time vs Design-time
46
Почитать• https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
• http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
• http://martinfowler.com/articles/richardsonMaturityModel.html
• REST in Practice by Jim Webber, Savas Parastatidis, and Ian Robinson
• http://www.jeffknupp.com/blog/2014/06/03/why-i-hate-hateoas
• http://timelessrepo.com/haters-gonna-hateoas
Спасибо, задавайте вопросы!
48