Skip to content

Latest commit

 

History

History
173 lines (139 loc) · 11.1 KB

lab02.md

File metadata and controls

173 lines (139 loc) · 11.1 KB

Практика 2. Rest Service

Программирование. Rest Service. Часть I

Задание А (3 балла)

Создайте простой REST сервис, в котором используются HTTP операции GET, POST, PUT и DELETE. Предположим, что это сервис для будущего интернет-магазина, который пока что умеет работать только со списком продуктов. У каждого продукта есть поля: id (уникальный идентификатор), name и description.

Таким образом, json-схема продукта (обозначим её <product-json>):

{
  "id": 0,
  "name": "string",
  "description": "string"
}

Данные продукта от клиента к серверу должны слаться в теле запроса в виде json-а, не в параметрах запроса.

Ваш сервис должен поддерживать следующие операции:

  1. Добавить новый продукт. При этом его id должен сгенерироваться автоматически
    • POST /product
    • Схема запроса:
      {
        "name": "string",
        "description": "string"
      }
    • Схема ответа: <product-json> (созданный продукт)
  2. Получить продукт по его id
    • GET /product/{product_id}
    • Схема ответа: <product-json>
  3. Обновить существующий продукт (обновляются только те поля продукта, которые были переданы в теле запроса)
    • PUT /product/{product_id}
    • Схема запроса: <product-json> (некоторые поля могут быть опущены)
    • Схема ответа: <product-json> (обновлённый продукт)
  4. Удалить продукт по его id
    • DELETE /product/{product_id}
    • Схема ответа: <product-json> (удалённый продукт)
  5. Получить список всех продуктов
    • GET /products
    • Схема ответа:
      [ 
        <product-json-1>,
        <product-json-2>, 
        ... 
      ]
      

Предусмотрите возвращение ошибок (например, если запрашиваемого продукта не существует).

Вы можете положить код сервиса в отдельную директорию рядом с этим документом.

Задание Б (3 балла)

Продемонстрируйте работоспособность сервиса с помощью программы Postman (https://www.postman.com/downloads) и приложите соответствующие скрины, на которых указаны запросы и ответы со стороны сервиса для всех его операций.

Демонстрация работы

image

image

image

image

image

image

Задание В (4 балла)

Пусть ваш продукт также имеет иконку (небольшую картинку). Формат иконки (картинки) может быть любым на ваш выбор. Для простоты будем считать, что у каждого продукта картинка одна.

Добавьте две новые операции:

  1. Загрузить иконку:
    • POST product/{product_id}/image
    • Запрос содержит бинарный файл — изображение
  2. Получить иконку:
    • GET product/{product_id}/image
    • В ответе передаётся только сама иконка

Измените операции в Задании А так, чтобы теперь схема продукта содержала сведения о загруженной иконке, например, имя файла или путь:

"icon": "string"

Демонстрация работы

(Обязательно должна быть пустая папка uploads, чтобы там картинка потом хранилась, в gitub пустая папка почему-то не добавляется)

image

image

(*) В последующих домашних заданиях вам будет предложено расширить функционал данного сервиса.

Задачи

Задача 1 (2 балла)

Общая (сквозная) задержка прохождения для одного пакета от источника к приемнику по пути, состоящему из $N$ соединений, имеющих каждый скорость $R$ (то есть между источником и приемником $N - 1$ маршрутизатор), равна $d_{\text{сквозная}} = N \dfrac{L}{R}$ Обобщите данную формулу для случая пересылки количества пакетов, равного $P$.

Решение

  1. на первом соединении каждый пакет должен дождаться отправки всех пакетов, которые стоят раньше него
  2. на каждом последующем таких ожиданий не будет, так как все соединения имеют одинаковую скорость
  3. в итоге, задержка последнего пакета = общая задержка = $(N + P - 1) * L / R$

Задача 2 (2 балла)

Допустим, мы хотим коммутацией пакетов отправить файл с хоста A на хост Б. Между хостами установлены три последовательных канала соединения со следующими скоростями передачи данных: $R_1 = 200$ Кбит/с, $R_2 = 3$ Мбит/с и $R_3 = 2$ Мбит/с. Сколько времени приблизительно займет передача на хост Б файла размером $5$ мегабайт? Как это время зависит от размера пакета?

Решение

  1. минимальная пропускная способность: $$R_{\text{min}} = 0.2 \text{ Мбит/с}$$
  2. размер файла (в битах): $$X = 5 \times 8 = 40 \text{ Мбит}$$
  3. время передачи: $$t = \frac{X}{R_{\text{min}}} = \frac{40}{0.2} = 200 \text{ секунд} = 3 \text{ минуты } 20 \text{ секунд} $$

Задача 3 (2 балла)

Предположим, что пользователи делят канал с пропускной способностью $2$ Мбит/с. Каждому пользователю для передачи данных необходима скорость $100$ Кбит/с, но передает он данные только в течение $20$ процентов времени использования канала. Предположим, что в сети всего $60$ пользователей. А также предполагается, что используется сеть с коммутацией пакетов. Найдите вероятность одновременной передачи данных $12$ или более пользователями.

Решение

  1. биномиальное распределение: $$X \sim \text{Bin}(n = 60, p = 0.2)$$
  2. найдем $P(X \geq 12)$
  3. матож и дисперсия: $$\mu = np = 12, \quad \sigma^2 = np(1 - p) = 9.6, \quad \sigma \approx 3.1$$
  4. $$P(X \geq 12) \approx P\left( Z \geq \frac{11.5 - 12}{3.1} \right) = P(Z \geq -0.16)$$
  5. т.о. $$P(Z \geq -0.16) = 1 - 0.438 = 0.562$$

Задача 4 (2 балла)

Пусть файл размером $X$ бит отправляется с хоста А на хост Б, между которыми три линии связи и два коммутатора. Хост А разбивает файл на сегменты по $S$ бит каждый и добавляет к ним заголовки размером $80$ бит, формируя тем самым пакеты длиной $L = 80 + S$ бит. Скорость передачи данных по каждой линии составляет $R$ бит/с. Загрузка линий мала, и очередей пакетов нет. При каком значении $S$ задержка передачи файла между хостами А и Б будет минимальной? Задержкой распространения сигнала пренебречь.

Решение

  1. файл разбивается на сегменты по $S$ бит, т.е. $$L = 80 + S$$
  2. кол-во пакетов: $$N = \frac{X}{S}$$
  3. общая задержка: $$d_{\text{общая}} = \frac{(2 + \frac{X}{S})(80 + S)}{R}$$
  4. минимизируем: $$S = \sqrt{40X}$$

Задание 5 (2 балла)

Рассмотрим задержку ожидания в буфере маршрутизатора. Обозначим через $I$ интенсивность трафика, то есть $I = \dfrac{L a}{R}$. Предположим, что для $I &lt; 1$ задержка ожидания вычисляется как $\dfrac{I \cdot L}{R (1 – I)}$.

  1. Напишите формулу для общей задержки, то есть суммы задержек ожидания и передачи.
  2. Опишите зависимость величины общей задержки от значения $\dfrac{L}{R}$.

Решение

    1. интенсивность трафика: $$I = \frac{L a}{R}$$
    2. задержка: $$d_{\text{ожидания}} = \frac{I L}{R (1 - I)}$$
    3. общая задержка: $$d_{\text{общая}} = \frac{L}{R} + \frac{I L}{R (1 - I)}$$ Если подставим $I$, то: $$d_{\text{общая}} = \frac{L}{R} \cdot \frac{1}{1 - I}$$
  1. Зависимость от $\frac{L}{R}$:
    1. Уменьшение $L/R$ снижает задержку.
    2. При $I \to 1$ задержка резко возрастает (перегрузка).