← Назад к вопросам

Какие методы могут принимать HTTP-сервисы?

2.0 Middle🔥 101 комментариев
#Интеграции и обмены

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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, который удобен в использовании и соответствует стандартам веб-разработки.

Какие методы могут принимать HTTP-сервисы? | PrepBro