@ditsmod/openapi-validation
Щоб забезпечити автоматичну валідацію в застосунках Ditsmod на основі метаданих для OpenAPI, можна скористатись модулем @ditsmod/openapi-validation
. Під капотом цей модуль має інтеграцію з бібліотекою ajv, яка безпосередньо виконує щойно згадану валідацію.
На даний момент, автоматична валідація працює тільки для HTTP-запитів, що мають медіа-тип application/json
і не посилаються на Reference Object. Автоматична валідація працює для параметрів у:
- path
- query
- cookie
- header
- тілі запиту.
Встановлення
Після того, як ви створите OpenAPI-документацію, необхідно доставити два модулі для автоматичної валідації на її основі:
npm i @ditsmod/openapi-validation @ditsmod/i18n
Підключення валідації та встановлення опцій
Щоб підключити автоматичну валідацію у певному модулі, достатньо імпортувати туди ValidationModule
. Також ви можете передати ValidationOptions
та AJV_OPTIONS
:
import { featureModule, Providers, Status } from '@ditsmod/core';
import { ValidationModule, ValidationOptions, AJV_OPTIONS } from '@ditsmod/openapi-validation';
import { Options } from 'ajv';
@featureModule({
imports: [ValidationModule],
providersPerApp: new Providers()
.useValue<ValidationOptions>(ValidationOptions, { invalidStatus: Status.UNPROCESSABLE_ENTRY })
.useValue<Options>(AJV_OPTIONS, { allErrors: true }),
// ...
})
export class SomeModule {}
Підміна інтерсепторів валідації
Класи ParametersInterceptor
та RequestBodyInterceptor
відповідають за валідацію параметрів запиту та тіла запиту. Їх можна підмінити в масиві providersPerReq
на рівні модуля чи контролера:
import { featureModule } from '@ditsmod/core';
import { ParametersInterceptor } from '@ditsmod/openapi-validation';
import { MyInterceptor } from './my.interceptor.js';
@featureModule({
// ...
providersPerReq: [
{ token: ParametersInterceptor, useClass: MyInterceptor }
]
// ...
})
export class SomeModule {}
Перед написанням свого інтерсептора для валідації, можете спочатку проглянути як написано, наприклад, ParametersInterceptor.