MatrixGod
10.06.2015 - 11:20
всем огромный привет, миллион лет тут не появлялся и даже немного соскучился )
в общем, перейду непосредственно к делу.
многое изменилось со времен моего последнего появления здесь но не суть.
я создаю огромный RESTful API совсем совсем один и мне нужен хороший отцовский совет по организации кода.
использую я PHALCON. точней его микро модуль. кстати, кто не знаком с фалконом, советую от всей души. это просто супер дупер крутой и мощный фреймворк. самый лучший из тех с которыми я работал, имхо.
короче говоря, в моем API есть уже около 80 роутов (то есть разных URL каждый из которых что-то там делает и возвращает JSON в ответ).
на данный момент эти роуты собраны в одном файле и как только роут найден он идет к его соответсвующему файлу который сидит в другом месте и запускает его.
проблема в том что таких роутов будут как минимум 1000 и мне надо что-то с этим делать пока не поздно, ибо уже сегодня это плохо выглядит и меня бесит.
есть 2 разумных на мой взгляд подхода.
1. сделать какой-то умный entry point который сам знает что куда посылать взависимо от самого роута.
2. группировать роуты. то есть, на пример, все роуты которые относятся к пользователям (начинаются с /users) сгруппировать каким-то образом под /users.
кто за и против какого подхода? и если кто-то случаем знает как это делается на фалконе будет вообще прекрасно.
сенкс амигос!
Invis1ble
10.06.2015 - 11:51
как бы в RESTful-архитектуре обычно приняты роуты вида /{entity_name}(/{entity_id}[/{related_entity_name}(/{related_entity_id})]...)
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
MatrixGod
10.06.2015 - 11:57
Invis1ble, привет.
мне это понятно и я думаю что большинство роутов так и будят выглядеть.
но так же у меня много других роутов. которые не состоят из 1 или 2 или 3 а может и больше подразделений (то есть /). как тогда организовать по умному?
MatrixGod
10.06.2015 - 12:13
Invis1ble
api.example.com/users - дай всех юзеров
api.example.com/users/{user_id} - дай конкретного юзера
api.example.com/users/{user_id}/customers - дай всех клиентов относящихся к определенному юзеру
api.example.com/users/{user_id}/customers/{customer_id} - я думаю понятно.
Invis1ble
10.06.2015 - 12:16
Цитата (MatrixGod @ 10.06.2015 - 11:13) |
Invis1ble api.example.com/users - дай всех юзеров api.example.com/users/{user_id} - дай конкретного юзера api.example.com/users/{user_id}/customers - дай всех клиентов относящихся к определенному юзеру api.example.com/users/{user_id}/customers/{customer_id} - я думаю понятно. |
это стандартный вид именования, я про него и писал
а ты в предыдущем комменте написал "
не состоят из 1 или 2 или 3 а может и больше подразделений (то есть /)"
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
MatrixGod
10.06.2015 - 12:31
Invis1ble,
сорри опечатка.
так как организовать лучше? роуты всегда разные ведь.
Invis1ble
10.06.2015 - 12:37
ну очевидно, что надо либо сделать некий маппинг роут => контроллер
что-то типа
$routesMap = [
'users' => 'UserController',
'customers' => 'CustomerController',
];
или ввести некое правило, по которому роуты будут преобразовываться в имена контроллеров, например
$controllerName = ucfirst(singular($routeName)) . 'Controller';
далее парсить query string и получать из сегментов роута имена контроллеров
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Показал бы для начало код.
Invis1ble
10.06.2015 - 12:58
^ это точно
![smile.gif](http://phpforum.su/html/emoticons/smile.gif)
может там такое УГ, которое легче выкинуть и написать заново
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
MatrixGod
10.06.2015 - 14:28
код примерно такой:
$app->get('/users', function() {
});
$app->get('/users/{id}', function($id) {
});
$app->post('/users', function() {
});
все эти рауты в одном файле. сейчас.
вот я и думаю как жить дальше. но так чтоб потом легче было.
Invis1ble
10.06.2015 - 16:04
почитай документацию к своему фалкону распрекрасному
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Alchemist
10.06.2015 - 17:02
http://www.lornajane.net/posts/2012/buildi...ing-the-requestстаренькая статья в нескольких частях - просто и понятно объясняет как поднять REST сервер, с примерами и разъяснениями. На англицком.
$app->get('/{module}', function($module) {
});
$app->get('/{module}/{id}', function($module, $id) {
});
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации