REST и HATEOAS

Preview:

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

Recommended