2023-06-21 23:11:29 +03:00
|
|
|
|
---
|
|
|
|
|
title: "📥 RESTful и HTTP методы"
|
|
|
|
|
date: 2023-06-21T23:11:07+03:00
|
|
|
|
|
draft: false
|
|
|
|
|
tags: [http, tips]
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Что такое RESTful веб-сервис?
|
|
|
|
|
|
|
|
|
|
Архитектура REST разработана чтобы соответствовать
|
|
|
|
|
протоколу HTTP используемому в сети Интернет.
|
|
|
|
|
|
|
|
|
|
Центральное место в концепции RESTful веб-сервисов это понятие ресурсов.
|
|
|
|
|
Ресурсы представлены URI.
|
|
|
|
|
Клиенты отправляют запросы к этим URI используя методы представленные протоколом HTTP, и,
|
|
|
|
|
возможно, изменяют состояние этих ресурсов.
|
|
|
|
|
|
|
|
|
|
Методы HTTP спроектированы для воздействия на ресурс стандартным способом:
|
|
|
|
|
|
2023-06-25 21:11:33 +03:00
|
|
|
|
{{< table "table table-sm table-striped table-hover" >}}
|
2023-06-21 23:11:29 +03:00
|
|
|
|
| Метод HTTP | Действие | Пример |
|
2023-06-25 21:11:33 +03:00
|
|
|
|
|:----------:|:---------|:-------|
|
|
|
|
|
| GET | Получить информацию о ресурсе | `example.com/api/orders` (получить список заказов) |
|
|
|
|
|
| GET | Получить информацию о ресурсе | `example.com/api/orders/123` (получить заказ #123) |
|
|
|
|
|
| POST | Создать новый ресурс | `example.com/api/orders` (создать новый заказ из данных переданных с запросом) |
|
|
|
|
|
| PUT | Обновить ресурс | `example.com/api/orders/123` (обновить заказ #123 данными переданными с запросом) |
|
|
|
|
|
| DELETE | Удалить ресурс | `example.com/api/orders/123` (удалить заказ #123) |
|
|
|
|
|
{{</ table >}}
|
2023-06-21 23:11:29 +03:00
|
|
|
|
|
|
|
|
|
Дизайн REST не дает рекомендаций каким конкретно должен быть
|
|
|
|
|
формат данных передаваемых с запросами.
|
|
|
|
|
Данные переданные в теле запроса могут быть JSON blob,
|
|
|
|
|
или с помощью аргументов в URL.
|
|
|
|
|
|
|
|
|
|
## Пример простого веб-сервиса
|
|
|
|
|
|
|
|
|
|
При проектировании веб-сервиса или API нужно определить ресурсы,
|
|
|
|
|
которые будут доступны и запросы, с помощью которых эти данные будут доступны,
|
|
|
|
|
согласно правил REST.
|
|
|
|
|
|
|
|
|
|
Допустим мы хотим написать приложение To Do List
|
|
|
|
|
и мы должны спроектировать веб-сервис для него.
|
|
|
|
|
Первое что мы должны сделать, это придумать кореневой URL для доступа к этому сервису.
|
|
|
|
|
Например мы могли бы придумать в качестве корневого URL что-то типа:
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
http://[hostname]/todo/api/v1.0/
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Здесь я решил включить в URL имя приложения и версию API.
|
|
|
|
|
Добавление имени приложения в URL это хороший способ
|
|
|
|
|
разделить между собой сервисы запущенные на одном сервере.
|
|
|
|
|
Добавление версии API в URL может помочь,
|
|
|
|
|
если вы захотите сделать обновление в будущем
|
|
|
|
|
и внедрить в новой версии несовместимые функции
|
|
|
|
|
и не хотите ломать работающие приложения которые работают на старом API.
|
|
|
|
|
|
|
|
|
|
Следующим шагом мы должны выбрать ресурсы,
|
|
|
|
|
которые будут доступны через наш сервис.
|
|
|
|
|
У нас очень простое приложение, у нас есть только задачи,
|
|
|
|
|
поэтому нашими ресурсами могут быть только задачи из нашего ToDo листа.
|
|
|
|
|
|
|
|
|
|
Для доступа к ресурсам будем использовать следующие методы HTTP:
|
|
|
|
|
|
2023-06-25 21:11:33 +03:00
|
|
|
|
{{< table "table table-sm table-striped table-hover" >}}
|
2023-06-21 23:11:29 +03:00
|
|
|
|
| Метод HTTP | URI | Действие |
|
2023-06-25 21:11:33 +03:00
|
|
|
|
|:----------:|-----|----------|
|
|
|
|
|
| GET | `http://[hostname]/todo/api/v1.0/tasks` | Получить список задач |
|
|
|
|
|
| GET | `http://[hostname]/todo/api/v1.0/tasks/[task_id]` | Получить задачу |
|
|
|
|
|
| POST | `http://[hostname]/todo/api/v1.0/tasks` | Создать новую задачу |
|
|
|
|
|
| PUT | `http://[hostname]/todo/api/v1.0/tasks/[task_id]` | Обновить существующую задачу |
|
|
|
|
|
| DELETE | `http://[hostname]/todo/api/v1.0/tasks/[task_id]` | Удалить задачу |
|
|
|
|
|
{{</ table >}}
|
2023-06-21 23:11:29 +03:00
|
|
|
|
|
|
|
|
|
## Используемые ресурсы
|
|
|
|
|
|
|
|
|
|
- [Проектирование RESTful API с помощью Python и Flask](https://habr.com/ru/articles/246699/)
|