Код-ревью Senior Обмены и интеграции обновлено

Ревью вызова внешнего API

Вопрос

Регламентное задание загружает курсы валют из внешнего API. Найдите проблемы.

Соединение = Новый HTTPСоединение("api.rates.example", 80);
Запрос = Новый HTTPЗапрос("/rates?token=SECRET123");
Ответ = Соединение.Получить(Запрос);
Данные = ПрочитатьJSON(ЧтениеИзСтроки(Ответ.ПолучитьТелоКакСтроку()));
НачатьТранзакцию();
Для Каждого Курс Из Данные.rates Цикл
	ЗаписатьКурс(Курс);
КонецЦикла;
ЗафиксироватьТранзакцию();

Коротко

Внешние вызовы: HTTPS с таймаутом, секреты вне кода, проверка кода ответа и формата, логирование, транзакция по стандартному шаблону, и запись курсов только после успешного разбора.

Что должен найти ревьюер

  1. Безопасностьстрока 1
    HTTP без TLS и без таймаута: токен и данные идут открыто, а зависший сервис подвесит задание.
  2. Безопасностьстрока 2
    Токен зашит в код и передаётся в URL (попадёт в логи). Хранить в безопасном хранилище (БСП) и передавать в заголовке.
  3. Ошибкастрока 3
    Не проверяется Ответ.КодСостояния: при 500 или 401 код попытается разобрать текст ошибки как курсы.
  4. Ошибкастрока 5
    Транзакция без Попытка и ОтменитьТранзакцию: при ошибке записи транзакция останется открытой.

Разбор

Внешние вызовы: HTTPS с таймаутом, секреты вне кода, проверка кода ответа и формата, логирование, транзакция по стандартному шаблону, и запись курсов только после успешного разбора.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме