Ответ 1
Я заранее приношу свои извинения за самостоятельную ссылку на мои собственные рамки - я не могу помочь вам в противном случае, так как я больше ничего не использую. Я не рекламирую, так как это не публично.
Как я уже сказал в своем комментарии, я думаю, что хорошая веб-интерфейсная инфраструктура не должна означать, что это плохая структура веб-сервисов.
Поскольку я был неудовлетворен ограничительным образом обработкой любых популярных фреймворков PHP (CodeIgniter, CakePHP, Kohana), а также их размерами, я написал структуру, предназначенную для действительно только двух целей: процесс запрос и определить действие для принятия, а затем отделить код для этого действия от представления (ответа).
Я использую шаблон дизайна:
- Все URL-адреса переписываются (mod_rewrite) и передаются в точку выполнения выполнения.
- Ваша точка входа устанавливает пути, которые он распознает и обработает. И.Е. для веб-службы:
-
/users
- Список пользователей -
/user/*
- Пользователь идентифицируется по значению, где*
. -
/user/*/delete
- Удалить пользователя -
/posts
- Список сообщений -
/post/*
- Посмотреть сообщение*
-
- Наряду с указателем пути указывается функция I.E.
UserActions::saveUser
, если HTTP-методPOST
. Причина, по которой он выполняется только в POST, - это включить вывод и вход для того же URL-адреса. - Путь также указывает представление . Это тело ответа, которое будет отправлено в браузер. Он может быть представлен как прямой PHP, или вы можете подключить механизм шаблонов. В случае веб-служб все пути, вероятно, будут использовать один вид, который отображает ваши данные в формате вывода (JSON, XML, независимо). Представление может быть просто методом PHP и не требуется указывать файл шаблона.
- В случае с веб-интерфейсом представление может иметь родительское представление, которое его обертывает (создавая страницу из наизнанку).
- Последний вопрос - безопасность. Вы можете определить тип безопасности, который будет применяться к любому пути. Тип безопасности просто указывает, какую функцию (например,
SecurityManager::authorize
) проверяет наличие авторизации, и еслиfalse
возвращается, она перенаправляется на выбранный вами путь.
Причины, по которым я считаю, что этот шаблон проектирования хорошо работает для веб-служб:
- Позволяет использовать одноточечную точку, но может использоваться с несколькими точками ввода (для оптимизации, если необходимо).
- Не предполагайте, что вы хотите, чтобы ваши URL-адреса соответствовали вашей объектной модели, как и большинство основных фреймворков (примечательным исключением является Zend, как указано в комментариях).
- Легко адаптируется к REST (вместо проверки на
POST
, проверьте и другие методы). - Удаление любого HTML-кода абсолютно естественно, так как в этом шаблоне ответ полностью отделен от обработки.
- Все это можно сделать в нескольких классах.