Ответ на Validate API - Лучшая практика - PullRequest
0 голосов
/ 20 февраля 2019

Всякий раз, когда мы вызываем API A() с полезной нагрузкой P, мы выполняем некоторые первоначальные проверки {v1, v2, v3 ...} для P и возвращаем исключение типа E для первой проверки, которая не удалась.Код ответа для этих сбоев проверки: 400.

Мы хотим выделить {v1, v2, v3 ...} проверок в отдельный API V(), чтобы мы могли получить исчерпывающий список ошибок, которые произойдут, когда P не удается выполнить одну или несколько проверок в наборе a priori

С введением этого нового API V() можно отправлять неверный запрос самому API (независимо от P быть плохим или нет), который будет отбрасывать 400 тоже.

Очевидно, что мы хотим устранить неоднозначность, когда V() терпит неудачу из-за неверного запроса на V(), а когда он возвращает правильный список ошибок проверки, которые P не удастся.

Для этого у меня есть несколько вариантов:

Подход № 1

Собрать все ошибки проверки {e1, e2, e3 ...}.Создайте новую ошибку типа E с errorMessage, объединяющей все errorMessage s для {e1, e2, e3, ...} (с правильным разделителем), и отправьте ответ обратно с кодом состояния 200.

* 1037.* Недостаток : мы возвращаем 200 с ответом, тип которого является типом исключения E

Подход № 2

Делаем # 1, но вместо этого используемновый тип ответа в качестве обёртки вокруг E, который не является Exception

недостатком : это более специфично для моего варианта использования - я хочу быть очень консервативным в добавленииновые типы, потому что их трудно выкинуть, если мы решим от них избавиться.Более того, добавление нового типа только для того, чтобы обойти # 1, выглядит излишним.

Подход # 3

Вместо сворачивания списка ошибок {e1, e2, e3, ...} в одно исключение типа E, мы должны вернуть сам список вместе с 200 кодом состояния.

Недостаток : Проверка, по-видимому, служит пробным прогоном для фактического API A().Используя эту логику, мы хотели бы, чтобы выходы для A() и V() были как можно более похожими, если не одинаковыми (я знаю, это звучит слабо для «недостатка».)


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

...