[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: организация кода
MatrixGod
всем огромный привет, миллион лет тут не появлялся и даже немного соскучился )

в общем, перейду непосредственно к делу.
многое изменилось со времен моего последнего появления здесь но не суть.

я создаю огромный RESTful API совсем совсем один и мне нужен хороший отцовский совет по организации кода.

использую я PHALCON. точней его микро модуль. кстати, кто не знаком с фалконом, советую от всей души. это просто супер дупер крутой и мощный фреймворк. самый лучший из тех с которыми я работал, имхо.

короче говоря, в моем API есть уже около 80 роутов (то есть разных URL каждый из которых что-то там делает и возвращает JSON в ответ).

на данный момент эти роуты собраны в одном файле и как только роут найден он идет к его соответсвующему файлу который сидит в другом месте и запускает его.

проблема в том что таких роутов будут как минимум 1000 и мне надо что-то с этим делать пока не поздно, ибо уже сегодня это плохо выглядит и меня бесит.

есть 2 разумных на мой взгляд подхода.
1. сделать какой-то умный entry point который сам знает что куда посылать взависимо от самого роута.
2. группировать роуты. то есть, на пример, все роуты которые относятся к пользователям (начинаются с /users) сгруппировать каким-то образом под /users.

кто за и против какого подхода? и если кто-то случаем знает как это делается на фалконе будет вообще прекрасно.

сенкс амигос!
Invis1ble
как бы в RESTful-архитектуре обычно приняты роуты вида /{entity_name}(/{entity_id}[/{related_entity_name}(/{related_entity_id})]...)

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

MatrixGod
Invis1ble, привет.
мне это понятно и я думаю что большинство роутов так и будят выглядеть.
но так же у меня много других роутов. которые не состоят из 1 или 2 или 3 а может и больше подразделений (то есть /). как тогда организовать по умному?
Invis1ble
Цитата (MatrixGod @ 10.06.2015 - 10:57)
но так же у меня много других роутов. которые не состоят из 1 или 2 или 3 а может и больше подразделений (то есть /).
MatrixGod
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
Цитата (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
Invis1ble,
сорри опечатка.

так как организовать лучше? роуты всегда разные ведь.
Invis1ble
ну очевидно, что надо либо сделать некий маппинг роут => контроллер
что-то типа
$routesMap = [
'users' => 'UserController',
'customers' => 'CustomerController',
// ...
];

или ввести некое правило, по которому роуты будут преобразовываться в имена контроллеров, например
$controllerName = ucfirst(singular($routeName)) . 'Controller';

далее парсить query string и получать из сегментов роута имена контроллеров

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Oyeme
Показал бы для начало код.
Invis1ble
^ это точно smile.gif может там такое УГ, которое легче выкинуть и написать заново biggrin.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

MatrixGod
код примерно такой:

$app->get('/users', function() {
// do something
});

$app->get('/users/{id}', function($id) {
// do something
});

$app->post('/users', function() {
// do something
});


все эти рауты в одном файле. сейчас.
вот я и думаю как жить дальше. но так чтоб потом легче было.
Invis1ble
почитай документацию к своему фалкону распрекрасному smile.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Alchemist
http://www.lornajane.net/posts/2012/buildi...ing-the-request

старенькая статья в нескольких частях - просто и понятно объясняет как поднять REST сервер, с примерами и разъяснениями. На англицком.
chee
$app->get('/{module}', function($module) {
// do something
});

$app->get('/{module}/{id}', function($module, $id) {
// do something
});


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.