(Как) Можно ли использовать фильтры / параметры с подключенной к БД службой в Apigility?

Как 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и тому подобное.

Предоставляют ли службы, связанные с БД, фильтрацию? Если да, как с этим справиться?

3

Решение

Для этого вы собираетесь использовать пакет 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, указывающий, что запрос не прошел проверку.

1

Другие решения

Других решений пока нет …