Skip to content

Latest commit

 

History

History
112 lines (77 loc) · 6.93 KB

File metadata and controls

112 lines (77 loc) · 6.93 KB

REST

REST - Representational State Transfer (передача состояния представления) - архитектурный стиль обмена данными между разными компонентами системы, каждая из которых может физически располагаться в разных местах.

Представляет собой согласованный набор ограничений, учитываемых при проектировании удаленной системы.

Преимущества

  • надежность в виде отсутствия необходимости сохранять информацию о состояни клиентов;
  • производительность за счет использования кэша;
  • масштабируемость;
  • прозрачность системы взаимодействия;
  • простота интерфейсов;
  • портативность компонентов;
  • легкость внесения изменений;

REST ограничения и принципы

В общем случае компоненты распределенной системы взаимодействуют друг с другом посредством запросов-ответов по протоколу HTTP.

1. Приведение архитектуры к модели клиент-сервер

Ограничение заключается в раграничении потребностей клиентского интерфейса от потребностей сервера, хранящего данные. Данное ограничение повышает переносимость клиентского кода на другие платформы, а упрощение серверной части улучшает масштабируемость системы.

2. Остутствие состояния

В период между запросами серверу не нужно хранить информацию о состоянии клиента и наоборот. Все запросы от клиента должны быть составлены со всей необходимой для выполнения запроса сервером информации.

3. Кэширование

Клиенты могут выполнять кеширование ответов сервера, у которых должно быть обозначение как кэшируемых или некэшируемых для поддержания правильноти и аткуальности данных.

4. Единобразие интерфейса

Наличие общего формата запросов для сервера и ответов для клиентов

5. Слои

Иерархическая структура сетей с применением промежуточных серверов. Применение промежуточных серверов способно повысить масштабируемость за счёт балансировки нагрузки и распределённого кэширования.


Коммуникаия между клиентом и сервером

Коммуникация проходит путем запросов-ответов.

Запросы состоят содержат:

URI и ресурсы

Ресурсы - все то, что может иметь имя, аналоги классов в Java: пользователь, отчет, запрос, заказ, картинка, видео, анимацией, PDF.

Клиенты отпраляют запросы на эндпоинты - аналог адреса в сети - URI: последовательность символов, идентифицирующая абстрактный или физический ресурс. Uniform Resource Identifier — унифицированный идентификатор ресурса.

URI - путь до ресурса, для каждого ресурса он уникален.

URI в REST начинается с множественной формы существительного, описывающего некоторый ресурс. Например, со слова clients. Далее через слэш указывают ID — идентификатор некоторого конкретного клиента.

Примеры:

/clients — URI всех имеющихся клиентов;
/clients/23 — URI конкретного клиента, а именно клиента с ID=23;
/clients/4 — URI конкретного клиента, а именно клиента с ID=4.

Можно продолжить URI, добавив к нему заказы:

/clients/4/orders — URI всех заказов клиента №4;
/clients/1/orders/12 — URI заказа №12 клиента №1.

Если мы продолжим эту цепочку и добавим еще и товары, получим:

/clients/1/orders/12/items — URI списка всех товаров в заказе №12 сделанного клиентом №1.

С уровнями вложенности главное — делать URI интуитивно понятными.

Примеры запросов

Запрос Описание
GET /clients/23
Accept : application/json, application/xml
Получить информацию о клиенте №23 в формате json или xml
POST /clients
{
"name" : "Amigo",
"email" : "amigo@jr.com",
"phone" : "+7 (191) 746-43-23"
}
Создать нового клиента с полями:
Имя — Amigo
Email — amigo@jr.com
Тел. — +7 (191) 746-43-23
PUT /clients/1
{
"name" : "Ben",
"email" : "bigben@jr.com",
"phone" : "+380 (190) 346-42-13"
}
Редактировать клиента №1 в следующим образом:
Имя — Ben
Email — bigben@jr.com
Тел. — +380 (190) 346-42-13
DELETE /clients/12/orders/6 Удалить из системы заказ №6 у клиента №12