--- title: "📥 RESTful и HTTP методы" date: 2023-06-21T23:11:07+03:00 draft: false tags: [http, tips] --- ## Что такое RESTful веб-сервис? Архитектура REST разработана чтобы соответствовать протоколу HTTP используемому в сети Интернет. Центральное место в концепции RESTful веб-сервисов это понятие ресурсов. Ресурсы представлены URI. Клиенты отправляют запросы к этим URI используя методы представленные протоколом HTTP, и, возможно, изменяют состояние этих ресурсов. Методы HTTP спроектированы для воздействия на ресурс стандартным способом: {{< table "table table-sm table-striped table-hover" >}} | Метод HTTP | Действие | Пример | |:----------:|:---------|:-------| | 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) | {{}} Дизайн 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: {{< table "table table-sm table-striped table-hover" >}} | Метод HTTP | URI | Действие | |:----------:|-----|----------| | 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]` | Удалить задачу | {{}} ## Используемые ресурсы - [Проектирование RESTful API с помощью Python и Flask](https://habr.com/ru/articles/246699/)