diff --git a/content/posts/2023/http/restful-methods.md b/content/posts/2023/http/restful-methods.md new file mode 100644 index 0000000..f95bcbe --- /dev/null +++ b/content/posts/2023/http/restful-methods.md @@ -0,0 +1,73 @@ +--- +title: "📥 RESTful и HTTP методы" +date: 2023-06-21T23:11:07+03:00 +draft: false +tags: [http, tips] +--- + +## Что такое RESTful веб-сервис? + +Архитектура REST разработана чтобы соответствовать +протоколу HTTP используемому в сети Интернет. + +Центральное место в концепции RESTful веб-сервисов это понятие ресурсов. +Ресурсы представлены URI. +Клиенты отправляют запросы к этим URI используя методы представленные протоколом HTTP, и, +возможно, изменяют состояние этих ресурсов. + +Методы HTTP спроектированы для воздействия на ресурс стандартным способом: + +| Метод 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: + +| Метод 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/)