Подтвердить что ты не робот

Шаблон проектирования для создания достаточно сложного веб-сервиса PHP

Я только что "закончил" кодирование относительно вовлеченной веб-службы в PHP. База кода теперь немного беспорядочна из-за последних минут запросов, изменений, дополнений, обычных.

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

Поэтому я не использовал никаких фреймворков, таких как Zend или любые ORM, вроде Doctrine.

Мне было интересно, существуют ли какие-либо рамки или шаблоны проектирования, которые существуют с единственной целью создания API/веб-сервисов в PHP?

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

4b9b3361

Ответ 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-кода абсолютно естественно, так как в этом шаблоне ответ полностью отделен от обработки.
  • Все это можно сделать в нескольких классах.

Ответ 2

Imho, каждая "вещь", основанная на MVC, действительно может вам помочь.

Если вы действительно не хотите ничего использовать (попробуйте CakePHP!) уже существующий, структурирующий ваш код, следующий за mvc, может действительно помочь вы разделите логику своего приложения на более высокий уровень и сохраните его более читабельным и отлаживаемым.

Конечно, также с лучшим шаблоном вы можете написать ужасный код, это вам!

Ответ 3

Я думаю, вы можете использовать те же шаблоны, которые вы используете простыми веб-приложениями. У успокоительной службы есть другой интерфейс, чем веб-приложение, но все под этим интерфейсом одинаково. Вы можете преобразовать успокоительное обслуживание в веб-приложение следующим образом:

METHOD host/resource/data => host/resource/METHOD?data

ресурс - это контроллер, МЕТОД - это действие. Например:

GET http://library.com/books/123 => http://library.com/books/get?123

Итак, вы можете использовать фронт-контроллер и MVC.