Blog/content/posts/2023/http/restful-methods.md

78 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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) |
{{</ table >}}
Дизайн 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]` | Удалить задачу |
{{</ table >}}
## Используемые ресурсы
- [Проектирование RESTful API с помощью Python и Flask](https://habr.com/ru/articles/246699/)