Создание API RESTful и веб-сайта с PHP

У меня есть приложение PHP, которое я написал ранее, и хотел бы добавить API RESTful. Я также хотел бы расширить сайт, чтобы он больше походил на приложение Rails с точки зрения URL-адресов, которые вы вызываете, чтобы получить элементы в системе.

Есть ли способ вызвать элементы на PHP в Railsy без создания всех типов папок и индексных страниц? Как я могу вызвать информацию на PHP без использования тега запроса GET?

Если у вас есть какая-то форма mod_rewrite, вы можете сделать это довольно легко с файлом .htaccess.

Если у вас есть что-то вроде этого:

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

Он проверит, что файл, который вы пытаетесь получить, уже не существует. (Скажем, у вас есть файл hello.html, что вам все еще нужны люди для доступа через http://yoursite.com/hello.html )

Затем, если файл еще не существует, он загрузит ваш файл index.php остальной частью URL-адреса, хранящегося в переменной url.

Это означает, что вы можете вызвать что-то вроде этого http://yoursite.com/pages/edit/24, и он будет загружать index.php с / pages / edit / 24 внутри переменной url.

Это должно заставить вас начать, и вам не понадобятся все типы папок и индексных страниц, просто файл mod_rewrite, .htaccess и index.php, которые будут использоваться для загрузки всех необходимых вам.

Вы также можете рассмотреть возможность использования одной из фреймворков PHP со встроенной поддержкой REST, например CakePHP .

Быстрое примечание в ответ на Pascal MARTIN: Zend_Rest_Server не имеет абсолютно никакого отношения к REST. Они просто делают RPC со слегка более удобными URL-адресами и называют его REST таким образом, что он более модный.

Если вы хотите сделать REST, вам нужно будет немного поработать, так как я еще не нашел хорошую REST-библиотеку для PHP. Поэтому проверьте $_SERVER['REQUEST_METHOD'] чтобы решить, что делать с вызываемым ресурсом и т. Д.

Самый простой способ, вероятно, будет использовать фреймворк, который предоставляет вам ориентированные на REST функциональные возможности. Я знаю, что Zend Framework делает это с классом Zend_Rest_Server , что позволяет легко создавать сервер REST.

Я полагаю, что многие другие структуры делают то же самое.

Но если у вас уже есть приложение, которое не использует фреймворк (или оно основано на платформе, которая не встраивает этот класс), пара правил URLrEwriting будет очень хороша; вам просто нужно немного поработать над сопоставлением URLS / параметров с классами / методами 🙁

Образец дизайна, который вы ищете, называется фронт-контроллером .

В своей простейшей форме вы используете mod_rewrite для передачи входящих запросов и передачи их одному скрипту php. Затем URL обрабатывается регулярными выражениями и сопоставляется с различными действиями отклика. Однако сопоставление существующего приложения может потребовать обширной перезаписи.

Если вы хотите поиграть с этой концепцией, я рекомендую микрофрейм Silex .