Как Apigility документация (REST Service Tutorial -> Create a REST Service -> [infobox] Code-Connected vs DB-Connected services
говорит, что встроенная функциональность для служб, связанных с БД, — это «скорее инструмент быстрой разработки приложений (RAD) или прототипирования».
Что ж, сейчас я разрабатываю очень маленькое приложение и думаю, что этой функциональности прототипирования может быть достаточно. Но даже это небольшое приложение нуждается в простой фильтрации / параметризации запросов, например: items by name = 'foo'
, предметы по id < x and id > y
и тому подобное.
Предоставляют ли службы, связанные с БД, фильтрацию? Если да, как с этим справиться?
Для этого вы собираетесь использовать пакет zf-content-validation (см. https://apigility.org/documentation/modules/zf-content-validation).
С помощью модуля проверки содержимого вы можете определить входные фильтры в разделе конфигурации вашего модуля и указать, какой входной фильтр использовать для проверки ваших запросов на обслуживание.
Например (из документации):
'zf-content-validation' => array(
'Application\Controller\HelloWorld' => array(
'input_filter' => 'Application\Controller\HelloWorld\Validator',
'POST' => 'Application\Controller\HelloWorld\CreationValidator',
),
),'input_filter_specs' => array(
'Application\Controller\HelloWorldGet' => array(
0 => array(
'name' => 'name',
'required' => true,
'filters' => array(
0 => array(
'name' => 'Zend\Filter\StringTrim',
'options' => array(),
),
),
'validators' => array(),
'description' => 'Hello to name',
'allow_empty' => false,
'continue_if_empty' => false,
),
),
),
Эта конфигурация проверит, что запросы к вашему контроллеру HelloWorld будут содержать параметр «name», который является строкой, и он дополнительно урезает пробелы для вас. Если ваш запрос имел параметр запроса ?name=foo
ваш контроллер получит foo
для параметра имени. Или, если ваш запрос не содержит параметра name, вы получите ответ ApiProblem, указывающий, что запрос не прошел проверку.
Других решений пока нет …