Правильный rest api

29
Правильный REST API Владислав Алексеев

Upload: vladislav-alexeyev

Post on 17-Jul-2015

392 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Правильный REST API

Правильный REST API

Владислав Алексеев

Page 2: Правильный REST API

API?

Page 3: Правильный REST API

Стив Джобс производит революцию в индустрии (2007)

Page 4: Правильный REST API

Что такое REST?

REST - это набор принципов, которые

определяют веб-стандарты, такие как

HTTP and URIs и как они используются.

Roy Thomas

Fielding

Page 5: Правильный REST API

Что такое REST?

RE - Representational

S - State

T - Transfer

Page 6: Правильный REST API

Золотое правило REST

Хороший RESTful API тот, который можно менять легко и просто.

Mugunth Kumar

Page 7: Правильный REST API

Каждый источник обладает глобальным

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

Например: https://api.myapp.com/feed

Page 8: Правильный REST API

Независимость от состояния (Statelessness)

RESTful сервер не должен отслеживать,

хранить и тем более использовать в работе

текущую контекстную информацию о

клиенте.

Page 9: Правильный REST API

Независимость от состояния (Statelessness)

api.myapp.com/feed

Page 10: Правильный REST API

Независимость от состояния (Statelessness)

● /feed?last=20150101 - передача GET

параметра

● HTTP Header - If-Modified-Since

Page 11: Правильный REST API

Единый интерфейс

HTTP POST GET PUT DELETE

SQL INSERT SELECT UPDATE DELETE

CRUD CREATE READ UPDATE DELETE

Page 12: Правильный REST API

Единый интерфейс

GET api.myapp.com/getBook?id=14

ПЛОХО!

GET api.myapp.com/book/14

ХОРОШО

Page 13: Правильный REST API

Единый интерфейс

GET api.myapp.com/deleteBook?id=14

2 раза ПЛОХО

DELETE api.myapp.com/book/14

ХОРОШО

Page 14: Правильный REST API

Единый интерфейс

Просто и понятно:

GET api.myapp.com/book/ — получить список всех

книг

GET api.myapp.com/book/3 — получить книгу

PUT api.myapp.com/book/ — добавить книгу

POST api.myapp.com/book/3 – изменить книгу

DELETE api.myapp.com/book/3 – удалить книгу

Page 15: Правильный REST API

Единый интерфейс

Page 16: Правильный REST API

Единый интерфейс

Page 17: Правильный REST API

Коды ответов на запросы

GET | 200 - OK

PUT | 201 - Created

GET | 400 - Bad request

GET | 403 - Forbidden

GET | 404 - Not found

GET | 500 - ISE

GET | 502 - Bad gateway

Page 18: Правильный REST API

Кэширование

Если ваше приложение тормозит —добавьте кэширование. Если приложение глючит — уберите кэширование. Ну почему кэширование так сложно!

Page 19: Правильный REST API

Кэширование

Модель валидности

location ~ \.(jpg|gif|png|ico|jpeg|css|swf)$

{

expires 7d;

}

Page 20: Правильный REST API

Кэширование

ETAG

Page 21: Правильный REST API

Разделение на версии

Разделение через URL (просто и логично,

больше подходит для глобальных

изменений)

api.myapp.com/v1/feed

api.myapp.com/v2/feed

Page 22: Правильный REST API

Разделение на версии

Разделение через модель (сложнее,

подходит для небольших изменений и

введения фич)

Feed myFeedObject = Feed.createFeedObject("1.0");

myFeedObject.populateWithDBObject(FeedDao* feedDaoObject);

Page 23: Правильный REST API

Разделение на версии

Вместо UserAgent можно посылать

заголовок Accept:

Accept: application/json

Accept: application/myapp.1.12+json

Page 24: Правильный REST API

Что насчет безопасности?

OAuth HTTPS Onion routing

Page 25: Правильный REST API

Какие есть альтернативы?

Page 26: Правильный REST API

SOAP vs REST

1. В сервисах, которые будут использоваться из

JS.

2. В сервисах, которые будут использоваться из

языков, в которых нет возможности

сгенерировать прокси клиента.

3. Когда существуют очень высокие требования к

производительности.

Page 27: Правильный REST API

SOAP vs REST

1. Транзакции

2. Когда взаимодействие происходит между платформами, под которые

существуют инструменты для ускорения разработки с

использованием SOAP. Например, SOAP-сервис на JAVA, который

будет использоваться из .Net и Flex.

Page 28: Правильный REST API

Технологии

Ruby - Ruby On Rails, Grape etc

Java - Jersey, Apache CXF etc

Node.JS - Actionhero.js, express.js etc

PHP - Yii, Laravel etc

Page 29: Правильный REST API

Спасибо за внимание!