Я реализую Api с ServiceStack. Одним из ключевых аспектов моего решения является агрессивная стратегия проверки.ServiceStack - проверка и доступ к базе данных
Я использую ValidationFeature ServiceStack, а это означает, что если есть IValidator < ReqDto> (или его потомок: AbstractValidator < ReqDto>), зарегистрированные в контейнере приложения, проверка будет автоматически запускаться до сервиса.
Являясь агрессивной проверкой, я имею в виду, что я проверяю все возможные сценарии ошибок и логические проверки на уровне проверки достоверности. В результате моя логика обслуживания чрезвычайно чистая и короткая.
Эта независимость Службы логики от Сервисной проверки является чем-то действительно приятным с практической точки зрения, поскольку она обеспечивает очень легкое чтение и рассуждение о логике/реализации службы. Тем не менее, я начинаю думать, что правила FluentValidation и RuleSets лучше подходят для простой проверки формата, а не для прямого доступа к базам данных, как я делаю (в основном для проверки 404 ошибок, возникших из идентификаторов, извлеченных из запроса).
Вопросы:
1: Является ли это неправильно концептуально для логики проверки доступа к базе данных?
2: Из того, что я видел до сих пор, включая источник SS, я не нашел форму для определения правила FluentValidation для таких случаев, как: вытащить идентификатор из запроса, получить доступ к базе данных, получить объект и бросить 404, если запись не была найдена. Я использую только правила FV, чтобы определить основные валидаций формата, такие как:
RuleFor(x => x.UserName).NotEmpty();
RuleFor(x => x.Password).NotEmpty();
остальное я делать вручную. Любой, у кого есть решение этой проблемы?
ПРИМЕЧАНИЕ. Это не вопрос о том, как преобразовать ValidationResult/ValidationError в HttpResult/HttpError. I, которые охватили, используя ValidationFeature's ErrorResponseFilter, который был введен в SS 3.9.44. Спасибо
Любой способ удаления проверки из границ службы, в том же порядке, что и при проверке? –
@Blitzkrieg Вам необходимо реализовать фильтр запроса, который запускается перед вашей службой. Это разделило бы его аналогичным образом на валидацию. Ключевым моментом, который следует отметить, является несоблюдение записи, должно вызывать исключение NotFound, а не исключение проверки. См. Здесь [фильтры запроса] (https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters). – Scott
Да, это вроде очевидно ... И это отбрасывает 401, 403, 404, 409, 421 и 500 из проверки. Если вы видите в вопросе, я добавил примечание, где я это отношу. –