2009-07-17 65 views
3

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

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

回答

13

如果你有某种形式的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变量中加载/ pages/edit/24的index.php文件。

这应该让你开始,你不会需要各种文件夹和索引页,只需要mod_rewrite,.htaccess文件和一个index.php,将用于加载任何你需要的。

2

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

0

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

我想其他许多框架也一样。但是,如果您已经有了一个不使用框架的应用程序(或基于未嵌入该类的框架),那么一些URLrEwriting规则可以做得很好;但是,如果您已经有一个应用程序不使用框架(或基于不嵌入该类的框架)你只需要更多的工作来将URLS /参数映射到类/方法:-(

2

respopnse快速注意到Pascal MARTIN:Zend_Rest_Server与REST完全无关,它们只是对RPC做了一些更好的URL并把它称为REST,以便更时髦

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

+0

啊我错了:CakePHP其实对REST来说确实很好。虽然它有一个可怕的ORM层,但确定:-) – skrebbel 2009-07-17 13:14:52

0

您正在寻找的设计模式称为front controller

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

如果你想玩这个概念,我建议Silex microframework。