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

Ревью обработчика HTTP-сервиса

Вопрос

Перед вами обработчик POST /orders. Найдите проблемы.

Функция ЗаказыPOST(Запрос)
	Текст = Запрос.ПолучитьТелоКакСтроку();
	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(Текст);
	Данные = ПрочитатьJSON(Чтение);
	Док = Документы.Заказ.СоздатьДокумент();
	Док.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(Данные.client);
	Док.Записать(РежимЗаписиДокумента.Проведение);
	Ответ = Новый HTTPСервисОтвет(200);
	Возврат Ответ;
КонецФункции

Коротко

HTTP-сервис это граница системы: всё, что пришло извне, проверяется, ошибки возвращаются понятными кодами, операции создания идемпотентны, а ответ содержит результат.

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

  1. Ошибкастрока 5
    Нет обработки ошибок: при битом JSON сервис вернёт 500 с текстом исключения. Нужны Попытка и ответ 400 с описанием.
  2. Ошибкастрока 6
    Нет проверки внешнего идентификатора: повтор запроса создаст дубль заказа.
  3. Ошибкастрока 7
    Поиск контрагента по наименованию ненадёжен; если не найден, запишется пустой контрагент. Искать по ИНН или внешнему ID и возвращать ошибку.
  4. Ошибкастрока 8
    Проведение может не пройти (остатки, проверки), исключение не обработано. И сразу проводить заказ из внешней системы не всегда правильно.
  5. Стильстрока 9
    Для создания ресурса уместен код 201 и тело с номером или идентификатором документа, иначе сайт не узнает, что создано.

Разбор

HTTP-сервис это граница системы: всё, что пришло извне, проверяется, ошибки возвращаются понятными кодами, операции создания идемпотентны, а ответ содержит результат.

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

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

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