Какие методы могут принимать HTTP-сервисы?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
HTTP-методы, которые может принимать веб-сервис
Основные HTTP-методы (RFC 7231)
HTTP-методы — это глаголы, которые определяют тип операции, выполняемой над ресурсом. В 1С веб-сервис может обрабатывать различные HTTP-методы в зависимости от его назначения.
1. GET (Получение данных)
Используется для чтения данных без изменения состояния на сервере.
Характеристики:
- Безопасный (не изменяет данные)
- Идемпотентный (повторный вызов даёт тот же результат)
- Может кэшироваться
- Данные передаются в URL (query string)
// В 1С веб-сервис обрабатывающий GET
&НаВебе
Процедура GET_Документы()
// Получаем параметры из URL: /api/documents?id=123&status=new
IDДокумента = ПолучитьПараметрДанных("id");
Статус = ПолучитьПараметрДанных("status");
// Получаем данные
Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ
| Документ.Ссылка,
| Документ.Номер,
| Документ.Дата,
| Документ.Статус
|ИЗ Документ.ПриходнаяНакладная КАК Документ
|ГДЕ Документ.Статус = &Статус
";
Запрос.УстановитьПараметр("Статус", Статус);
РезультатЗапроса = Запрос.Выполнить();
// Возвращаем JSON
ВернутьДанные(РезультатЗапроса);
КонецПроцедуры
2. POST (Создание нового ресурса)
Используется для создания новых данных на сервере.
Характеристики:
- Небезопасный (изменяет состояние)
- Не идемпотентный (повторный вызов создаёт дубликат)
- Не кэшируется обычно
- Данные передаются в теле запроса
// Веб-сервис для создания документа через POST
&НаВебе
Процедура POST_СоздатьДокумент()
// Читаем JSON из тела запроса
ТелоЗапроса = ПрочитатьТелоЗапроса();
// Парсим JSON
JSONОбъект = Новый JSONЧтец();
JSONОбъект.ПрочитатьДанные(ТелоЗапроса);
// Создаём документ
НовыйДокумент = Документы.ПриходнаяНакладная.СоздатьДокумент();
НовыйДокумент.Номер = JSONОбъект.Получить("numero");
НовыйДокумент.Контрагент = JSONОбъект.Получить("counterparty");
НовыйДокумент.Дата = ТекущаяДата();
// Сохраняем
Попытка
НовыйДокумент.Записать();
// Возвращаем успешный результат с ID
РезультатJSON = Новый JSONОбъект();
РезультатJSON.Вставить("id", НовыйДокумент.Ссылка);
РезультатJSON.Вставить("status", "created");
ВернутьДанные(РезультатJSON, 201); // 201 Created
Исключение
// Возвращаем ошибку
РезультатОшибки = Новый JSONОбъект();
РезультатОшибки.Вставить("error", "Failed to create document");
РезультатОшибки.Вставить("message", ОписаниеОшибки());
ВернутьДанные(РезультатОшибки, 400); // 400 Bad Request
КонецПопытки;
КонецПроцедуры
3. PUT (Полное обновление ресурса)
Используется для полного обновления существующего ресурса.
Характеристики:
- Небезопасный
- Идемпотентный (повторный вызов даёт тот же результат)
- Требует полное представление ресурса
- Данные в теле запроса
// Обновление документа целиком
&НаВебе
Процедура PUT_ОбновитьДокумент()
IDДокумента = ПолучитьПараметрДанных("id");
ТелоЗапроса = ПрочитатьТелоЗапроса();
// Читаем существующий документ
ДокументОбъект = Документы.ПриходнаяНакладная.ПолучитьОбъект(IDДокумента);
// Парсим входные данные
JSONОбъект = Новый JSONЧтец();
JSONОбъект.ПрочитатьДанные(ТелоЗапроса);
// Обновляем все поля (полная замена)
ДокументОбъект.Номер = JSONОбъект.Получить("numero");
ДокументОбъект.Контрагент = JSONОбъект.Получить("counterparty");
ДокументОбъект.Сумма = JSONОбъект.Получить("amount");
ДокументОбъект.Статус = JSONОбъект.Получить("status");
// Сохраняем (полное обновление)
ДокументОбъект.Записать();
// Возвращаем обновленные данные
Результат = Новый JSONОбъект();
Результат.Вставить("id", ДокументОбъект.Ссылка);
Результат.Вставить("message", "Document updated successfully");
ВернутьДанные(Результат, 200);
КонецПроцедуры
4. PATCH (Частичное обновление ресурса)
Используется для частичного обновления ресурса (обновляются только переданные поля).
Характеристики:
- Небезопасный
- Не гарантирует идемпотентность (может быть зависит от формата)
- Обновляются только переданные поля
- Данные в теле запроса
// Частичное обновление (например, только статус)
&НаВебе
Процедура PATCH_ОбновитьСтатус()
IDДокумента = ПолучитьПараметрДанных("id");
ТелоЗапроса = ПрочитатьТелоЗапроса();
ДокументОбъект = Документы.ПриходнаяНакладная.ПолучитьОбъект(IDДокумента);
JSONОбъект = Новый JSONЧтец();
JSONОбъект.ПрочитатьДанные(ТелоЗапроса);
// Обновляем ТОЛЬКО переданные поля
Если JSONОбъект.Содержит("status") Тогда
ДокументОбъект.Статус = JSONОбъект.Получить("status");
КонецЕсли;
Если JSONОбъект.Содержит("sum") Тогда
ДокументОбъект.Сумма = JSONОбъект.Получить("sum");
КонецЕсли;
ДокументОбъект.Записать();
ВернутьДанные(ДокументОбъект, 200);
КонецПроцедуры
5. DELETE (Удаление ресурса)
Используется для удаления ресурса.
Характеристики:
- Небезопасный
- Идемпотентный (повторное удаление не ломает систему)
- Обычно возвращает пустой ответ или подтверждение
- Может иметь query параметры (например, для мягкого удаления)
// Удаление документа
&НаВебе
Процедура DELETE_УдалитьДокумент()
IDДокумента = ПолучитьПараметрДанных("id");
// Проверяем, есть ли документ
Если НЕ ЗначениеЗаполнено(IDДокумента) Тогда
РезультатОшибки = Новый JSONОбъект();
РезультатОшибки.Вставить("error", "Document ID is required");
ВернутьДанные(РезультатОшибки, 400);
Возврат;
КонецЕсли;
// Получаем документ
ДокументОбъект = Документы.ПриходнаяНакладная.ПолучитьОбъект(IDДокумента);
Попытка
// Мягкое удаление (помечаем как удалённый)
ДокументОбъект.ПометитьНаУдаление(Истина);
Результат = Новый JSONОбъект();
Результат.Вставить("message", "Document deleted successfully");
Результат.Вставить("id", IDДокумента);
ВернутьДанные(Результат, 200);
Исключение
РезультатОшибки = Новый JSONОбъект();
РезультатОшибки.Вставить("error", "Cannot delete document");
ВернутьДанные(РезультатОшибки, 409); // 409 Conflict
КонецПопытки;
КонецПроцедуры
6. HEAD (Получение заголовков, как GET без тела)
Используется для получения метаинформации без самих данных.
// Проверка существования документа
&НаВебе
Процедура HEAD_ПроверитьДокумент()
IDДокумента = ПолучитьПараметрДанных("id");
// Проверяем существование
Если ДокументСуществует(IDДокумента) Тогда
ВернутьДанные("", 200);
Иначе
ВернутьДанные("", 404);
КонецЕсли;
КонецПроцедуры
7. OPTIONS (Получение доступных методов)
Используется для получения информации о поддерживаемых методах.
// Информация о поддерживаемых методах
&НаВебе
Процедура OPTIONS_ПолучитьДоступныеМетоды()
МетодыОтвета = Новый JSONОбъект();
МетодыОтвета.Вставить("methods", Новый JSONМассив(
"GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"
));
МетодыОтвета.Вставить("version", "1.0");
ВернутьДанные(МетодыОтвета, 200);
КонецПроцедуры
Сравнительная таблица HTTP-методов
| Метод | Назначение | Безопасный | Идемпотентный | Кэшируется | Тело запроса |
|---|---|---|---|---|---|
| GET | Чтение | ✓ | ✓ | ✓ | Нет |
| POST | Создание | ✗ | ✗ | ✗ | Да |
| PUT | Полное обновление | ✗ | ✓ | ✗ | Да |
| PATCH | Частичное обновление | ✗ | ~ | ✗ | Да |
| DELETE | Удаление | ✗ | ✓ | ✗ | Опционально |
| HEAD | Метаинформация | ✓ | ✓ | ✓ | Нет |
| OPTIONS | Доступные методы | ✓ | ✓ | ✓ | Нет |
Коды ответов HTTP
2xx — Успех
├── 200 OK
├── 201 Created (после POST)
└── 204 No Content
4xx — Ошибка клиента
├── 400 Bad Request
├── 401 Unauthorized
├── 403 Forbidden
├── 404 Not Found
└── 409 Conflict
5xx — Ошибка сервера
├── 500 Internal Server Error
└── 503 Service Unavailable
Пример полного CRUD веб-сервиса
// Веб-сервис для управления документами
&НаВебе
Процедура GET() // Список документов
КонецПроцедуры
&НаВебе
Процедура GET_ПоИД() // Получить один документ
КонецПроцедуры
&НаВебе
Процедура POST() // Создать документ
КонецПроцедуры
&НаВебе
Процедура PUT_ПоИД() // Обновить полностью
КонецПроцедуры
&НаВебе
Процедура PATCH_ПоИД() // Обновить частично
КонецПроцедуры
&НаВебе
Процедура DELETE_ПоИД() // Удалить
КонецПроцедуры
Правильный выбор HTTP-методов критичен для создания RESTful API, который удобен в использовании и соответствует стандартам веб-разработки.