使用PHP创建RESTful API和网站

我有一个我之前写的PHP应用程序,我想添加一个RESTful API。 我还想扩展网站,使其更像是一个Rails应用程序,就您调用的URL来获取系统中的项目。

有没有办法用Railsy方式调用PHP中的项目而不创建各种文件夹和索引页面? 如何在不使用GET查询标记的情况下在PHP中调用信息?

如果你有某种forms的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的内容 ,它将在url变量中加载index.php和/ pages / edit / 24。

这应该让你开始,你不需要所有类型的文件夹和索引页,只需要mod_rewrite,.htaccess文件和index.php,它将用于加载你需要的任何东西。

您还可以考虑使用其中一个内置REST支持的PHP框架,例如CakePHP 。

请仔细阅读Pascal MARTIN:Zend_Rest_Server与REST完全无关。 他们只使用稍微好一点的URL做RPC,并将其称为REST,以便它更时尚。

如果你想做REST,你需要自己做更多的工作,因为我还没有为PHP找到一个好的REST库。 因此,检查$_SERVER['REQUEST_METHOD']以决定如何处理被调用资源等。

最简单的方法可能是使用一个框架,为您提供面向REST的function。 我知道Zend Framework使用类Zend_Rest_Server来实现,可以轻松创建REST服务器。

我想许多其他框架也是如此。

但是,如果您已经有一个不使用框架的应用程序(或者基于没有嵌入这种类的Framework的应用程序),那么一些URLrEwriting规则就可以了。 你只需要更多的工作来将URLS /参数映射到类/方法:-(

您正在寻找的设计模式称为前端控制器 。

在最简单的forms中,您使用mod_rewrite传递传入的请求并将其传递给单个PHP脚本。 然后使用正则表达式解析url并将其映射到不同的响应操作。 但是,映射现有应用程序可能需要进行大量重写。

如果你想玩这个概念我推荐Silex微框架。