Создайте простой REST сервис, в котором используются HTTP операции GET, POST, PUT и DELETE.
Предположим, что это сервис для будущего интернет-магазина, который пока что умеет
работать только со списком продуктов. У каждого продукта есть поля: id
(уникальный идентификатор),
name
и description
.
Таким образом, json-схема продукта (обозначим её <product-json>
):
{
"id": 0,
"name": "string",
"description": "string"
}
Данные продукта от клиента к серверу должны слаться в теле запроса в виде json-а, не в параметрах запроса.
Ваш сервис должен поддерживать следующие операции:
- Добавить новый продукт. При этом его
id
должен сгенерироваться автоматическиPOST /product
- Схема запроса:
{ "name": "string", "description": "string" }
- Схема ответа:
<product-json>
(созданный продукт)
- Получить продукт по его id
GET /product/{product_id}
- Схема ответа:
<product-json>
- Обновить существующий продукт (обновляются только те поля продукта, которые были переданы в теле запроса)
PUT /product/{product_id}
- Схема запроса:
<product-json>
(некоторые поля могут быть опущены) - Схема ответа:
<product-json>
(обновлённый продукт)
- Удалить продукт по его id
DELETE /product/{product_id}
- Схема ответа:
<product-json>
(удалённый продукт)
- Получить список всех продуктов
GET /products
- Схема ответа:
[ <product-json-1>, <product-json-2>, ... ]
Предусмотрите возвращение ошибок (например, если запрашиваемого продукта не существует).
Вы можете положить код сервиса в отдельную директорию рядом с этим документом.
Продемонстрируйте работоспособность сервиса с помощью программы Postman (https://www.postman.com/downloads) и приложите соответствующие скрины, на которых указаны запросы и ответы со стороны сервиса для всех его операций.
Пусть ваш продукт также имеет иконку (небольшую картинку). Формат иконки (картинки) может быть любым на ваш выбор. Для простоты будем считать, что у каждого продукта картинка одна.
Добавьте две новые операции:
- Загрузить иконку:
- Получить иконку:
Измените операции в Задании А так, чтобы теперь схема продукта содержала сведения о загруженной иконке, например, имя файла или путь:
"icon": "string"
(Обязательно должна быть пустая папка uploads, чтобы там картинка потом хранилась, в gitub пустая папка почему-то не добавляется)
(*) В последующих домашних заданиях вам будет предложено расширить функционал данного сервиса.
Общая (сквозная) задержка прохождения для одного пакета от источника к приемнику по пути,
состоящему из
- на первом соединении каждый пакет должен дождаться отправки всех пакетов, которые стоят раньше него
- на каждом последующем таких ожиданий не будет, так как все соединения имеют одинаковую скорость
- в итоге, задержка последнего пакета = общая задержка =
$(N + P - 1) * L / R$
Допустим, мы хотим коммутацией пакетов отправить файл с хоста A на хост Б. Между хостами установлены три
последовательных канала соединения со следующими скоростями передачи данных:
- минимальная пропускная способность:
$$R_{\text{min}} = 0.2 \text{ Мбит/с}$$ - размер файла (в битах):
$$X = 5 \times 8 = 40 \text{ Мбит}$$ - время передачи:
$$t = \frac{X}{R_{\text{min}}} = \frac{40}{0.2} = 200 \text{ секунд} = 3 \text{ минуты } 20 \text{ секунд} $$
Предположим, что пользователи делят канал с пропускной способностью
- биномиальное распределение:
$$X \sim \text{Bin}(n = 60, p = 0.2)$$ - найдем
$P(X \geq 12)$ - матож и дисперсия:
$$\mu = np = 12, \quad \sigma^2 = np(1 - p) = 9.6, \quad \sigma \approx 3.1$$ $$P(X \geq 12) \approx P\left( Z \geq \frac{11.5 - 12}{3.1} \right) = P(Z \geq -0.16)$$ - т.о.
$$P(Z \geq -0.16) = 1 - 0.438 = 0.562$$
Пусть файл размером
- файл разбивается на сегменты по
$S$ бит, т.е.$$L = 80 + S$$ - кол-во пакетов:
$$N = \frac{X}{S}$$ - общая задержка:
$$d_{\text{общая}} = \frac{(2 + \frac{X}{S})(80 + S)}{R}$$ - минимизируем:
$$S = \sqrt{40X}$$
Рассмотрим задержку ожидания в буфере маршрутизатора. Обозначим через
- Напишите формулу для общей задержки, то есть суммы задержек ожидания и передачи.
- Опишите зависимость величины общей задержки от значения
$\dfrac{L}{R}$ .
-
- интенсивность трафика:
$$I = \frac{L a}{R}$$ - задержка:
$$d_{\text{ожидания}} = \frac{I L}{R (1 - I)}$$ - общая задержка:
$$d_{\text{общая}} = \frac{L}{R} + \frac{I L}{R (1 - I)}$$ Если подставим$I$ , то:$$d_{\text{общая}} = \frac{L}{R} \cdot \frac{1}{1 - I}$$
- интенсивность трафика:
- Зависимость от
$\frac{L}{R}$ :- Уменьшение
$L/R$ снижает задержку. - При
$I \to 1$ задержка резко возрастает (перегрузка).
- Уменьшение