Пишу на php api с использованием slim framework. С помощью GET- получаем значения для различных сущностей сохраненных в базе данных, а с помощью POST - изменяем. Соответственно разница между всеми этими сущностями - Таблица в базе данных, другие поля и возможно внедрение некоторой логики: если в поле значение < n, то нельзя менять или поменять в другом месте.
Весь код представляет шаблон, где XClassName - разное название классов:
<?php
interface iXClassName
{
public function get_permition_for_operation();
public function validate_input_get_array( $some_input_param);
public function get_value_to_rend();
}
class XClassName implements iXClassName{
}
require 'Slim/Slim.php';
$app = new \Slim\Slim();
$app->get('/api/get/XClassName/(:id)', function ($id) use ($app,$DBH) {
$XClassName->get_permition_for_operation();
$XClassName->validate_input_get_array( $some_input_param);
$_params_array=$XClassName->get_value_to_rend();
return $app->render('template_get_XclassName.tml', $_params_array ));
});
$app->post('/api/post/XClassName/(:id)', function ($id) use ($app,$DBH) {
$XClassName->get_permition_for_operation();
$_post_array=array('XparamName'=> $app->request->post('paramName'), 'Yparam'=> $app->request->post('paramY'),...);
$XClassName->validate_post_input($_post_array);
$XClassName->simple_logic();
$XClassName->save_to_storage();
return $app->redirect('/api/post/XClassName/');
});
$app->run();
?>
Соответственно когда появляется новая функция, которую нужно внедрить во всех вызовах api - поместить внутрь каждого блока $app->post() / $app->get() - можно забыть/ошибиться
Хотелось бы услышать мысли по поводу правильного проектирования такого сервиса.
ЗЫ: Я думаю заменить это все паттерном Стратегия, но правильно ли это?
А как Вам такая возможность? http://docs.slimframework.com/#Route-Middleware