vbondarevsky / Connector

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8
Apache License 2.0
638 stars 207 forks source link

Обработка исключения при вызове запроса #147

Open malikov-pro opened 1 month ago

malikov-pro commented 1 month ago

Предлагаю расширить метод добавив в Ответ "ОписаниеОшибки" и "ПодготовленныйЗапрос", использую для формирования лога ошибки (ЖР+Sentry).

Функция ВызватьHTTPМетод(Сессия, Метод, URL, ДополнительныеПараметры)

    ПодготовленныйЗапрос = ПодготовитьЗапрос(Сессия, Метод, URL, ДополнительныеПараметры);

    НастройкиПодключения = НастройкиПодключения(Метод, URL, ДополнительныеПараметры);

    Попытка

        Ответ = ОтправитьЗапрос(Сессия, ПодготовленныйЗапрос, НастройкиПодключения);

        Если НастройкиПодключения.РазрешитьПеренаправление И Ответ.ЭтоРедирект Тогда
            // INFO: по хорошему аутентификацию нужно привести к новых параметрам, но пока будем игнорировать.
            Ответ = ПеренаправитьЗапрос(Сессия, НастройкиПодключения, ПодготовленныйЗапрос, Ответ);
        КонецЕсли;

        Ответ.Вставить("ОписаниеОшибки", "");
    Исключение
        Ответ = Новый Структура;
        Ответ.Вставить("ОписаниеОшибки", ОписаниеОшибки());
    КонецПопытки;

    Ответ.Вставить("ПодготовленныйЗапрос", ПодготовленныйЗапрос);

    Возврат Ответ;

КонецФункции
leemuar commented 1 month ago

Идея и желание понятное, но такое изменение не совместимо с текущим поведением всех методов, отправляющих запрос.

Оборачивая ОтправитьЗапрос() в попытку отключается проброс исключений вверх, в вызывающий код. Кто-то может на это рассчитывать. И добавляется необходимость всегда проверять значение свойства ответа "ОписаниеОшибки", чтобы понять успешно запрос выполнился или нет.

Понятно, что это из-за того, что при исключении невозможно получить исходный запрос, к нему приведший. Но уж слишком меняет использование исключений в библиотеке. Возможно есть другие способы добиться такого.

Пока на уме только какой-то выходной параметр, может в ДополнительныеПараметры какой-то спецключ добавить, куда будет что-то писаться в случае исключения