48
REST и HATEOAS 1

REST и HATEOAS

Embed Size (px)

Citation preview

Page 1: REST и HATEOAS

REST и HATEOAS

1

Page 2: REST и HATEOAS

REST и HATEOAS

2

Доклад не из будущего

Page 3: REST и HATEOAS

Артём Бей @defly_selfFullstack dev в Trinity Mirror

3

Page 4: REST и HATEOAS

REST != HTTP

Page 5: REST и HATEOAS

Representational State Transfer"Architectural Styles and

the Design of Network-based Software Architectures” Roy Fielding

5

Page 6: REST и HATEOAS

REST — это архитектурный стиль для распределенных гипермедиа систем.

6

Page 7: REST и HATEOAS

Ресурс

http://…/resource

<xml><entity/>

</xml>

{entity:{…}

}

7

Page 8: REST и HATEOAS

http://…/resource

<xml><entity/>

</xml>

{entity:{…}

}

представление

представление

ресурс

идентификатор

документкартинкапроцесс…

8

Page 9: REST и HATEOAS

Richardson Maturity Model

9

Page 10: REST и HATEOAS

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

Page 11: REST и HATEOAS

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

Page 12: REST и HATEOAS

TeslaModelSиспользуетRESTLevel1

Page 13: REST и HATEOAS

REST уровня 2

13

Page 14: REST и HATEOAS

REST уровня 2Используем HTTP по спецификации

14

Page 15: REST и HATEOAS

МетодыGETPOSTPUT

DELETEOPTIONSHEADPATCH…

15

Page 16: REST и HATEOAS

16

Page 17: REST и HATEOAS

200OK

{"success":false,"error":{"code":666,"message":"becausefkuthatswhy"}

17

Page 18: REST и HATEOAS

400BadRequest401Unauthorized404NotFound402PaymentRequired409Conflict…

18

Page 19: REST и HATEOAS

418 I’m a teapot

19

Page 20: REST и HATEOAS
Page 21: REST и HATEOAS
Page 22: REST и HATEOAS

Forbidden

Authorization:BearerToKeN

@wice_

Page 23: REST и HATEOAS

/users/orders/profile

GETPOSTPUT

DELETEOPTIONSHEADPATCH

200201…

300301…

400401…

500501…

покроет все ваши кейсы

23

Page 24: REST и HATEOAS

REST уровень 3

24

Page 25: REST и HATEOAS

Гипертекст

25

Page 26: REST и HATEOAS

HATEOASHypermedia As The Engine Of Application State

26

Page 27: REST и HATEOAS

представлениересурса=данные+контролы

27

Page 28: REST и HATEOAS

GET/feed

200OK

{"data":[{"title":"...","links":{"details":"http://..."}},....],"links":{"self":"http://...","first":"http://...","prev":"http://...","next":"http://...","last":"http://..."}}

28

Page 29: REST и HATEOAS

GET/feed?min_id=100500

200OK

{"data":[{"title":"...","links":{"details":“http://..."}},....],"links":{"self":"http://...","first":"http://...","prev":"http://...","next":"http://...","last":"http://..."}}

29

Page 30: REST и HATEOAS

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

Page 31: REST и HATEOAS

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

Page 32: REST и HATEOAS

POST/films/themartian/bookings

{count:3

}

201Created

Location:http://..../bookings/1

32

Page 33: REST и HATEOAS

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

Page 34: REST и HATEOAS

Стейт-машинаПереходим в новые состояния по ссылке

34

Page 35: REST и HATEOAS

Некоторые приёмы• Безопасные и идемпотентные операции

• Кеширование неизменяемых ресурсов

• X- заголовки

• Вендорные типы данных (application/vnd.myapi.basket.v1+json)

35

Page 36: REST и HATEOAS

В чём профит?

36

Page 37: REST и HATEOAS

Делаем клиент тоньше, не нужно больше хачить URL

Page 38: REST и HATEOAS

Распределённые приложения

Page 39: REST и HATEOAS

API могут использовать роботы

Page 40: REST и HATEOAS

Самодокументирование

Page 41: REST и HATEOAS

Developer Experience

Page 42: REST и HATEOAS

Вопросы к HATEOAS

42

Page 43: REST и HATEOAS

В JSON нет ссылок и форм.

Есть спецификации: HAL, Siren, json:api

43

Page 44: REST и HATEOAS

Нужна ли теперь документация?

Нужна. REST для машин.

44

Page 45: REST и HATEOAS

Слишком академично или много лишнего.

Не нужно реализовывать спецификации в полном

объёме.

45

Page 46: REST и HATEOAS

А Twitter, Facebook, … не применяют HATEOAS.

Run-time vs Design-time

46

Page 47: REST и HATEOAS

Почитать• 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

Page 48: REST и HATEOAS

Спасибо, задавайте вопросы!

48