一些与RESTful和PHP有关的基本问题

时间:2016-01-19 20:50:12

标签: php rest

我正在尝试RESTful API。我设计了一些简单的类来表示我的系统的每个元素,包括Message和Room类(它是一个包含任意数量消息的任意数量的房间的聊天应用程序)。

我经常以例如

的形式看到URI
/room                                (this would get all rooms)
/room/{room_id}                      (this would create, update or delete a room with this ID)
/room/{room_id}/message              (this would get all messages from a room with the specified ID)
/room/{room_id}/meesage/{message_id} (this would create, update or delete a message with this id)

所以我想我的两个问题是:

1)如何将这些请求的URI重定向到我的单个处理脚本(位于/api/api.1.0.0.php)

2)如何使用正确的HTTP动词请求这些URI,如put,delete,update等。

编辑:我应该补充一点,我希望在没有框架的情况下这样做。

2 个答案:

答案 0 :(得分:1)

以下是如何在apache上使用mod_rewrite将所有请求重定向到单个脚本。您将需要使用apache并安装/设置mod_rewrite(它安装在大多数共享主机上,并且很容易添加到自我管理系统)。

在文档根目录下存在API的子文件夹中创建.htaccess文件。将以下内容添加到文件中:

RewriteEngine On

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

第一个条件是确保文件不存在,这样你仍然可以加载存在的文件(没有它,甚至有效文件的请求都会重写)。第二个条件相同但检查它不是正在请求的有效目录。最后一行,即规则,捕获URI并告诉apache加载index.php,而不是将URI传递给URI get参数。在规则的最后是标记,LQSAL标志告诉apache如果满足此规则则停止处理规则,QSA告诉apache自动附加任何传递的查询字符串(获取字符串)参数。

然后,您可以使用$_GET['URI']在php中访问URI。一个简单的$URI = explode('/', $_GET['URI']);将为您提供传递的每个参数的格式良好的数组。

答案 1 :(得分:0)

至于在请求特定网址后指示更正应用程序的一部分,您应该阅读路由器。所有主要的MVC框架都将拥有先进的路由解决方案。 http://framework.zend.com/manual/current/en/modules/zend.mvc.routing.html

如果你想没有框架并使用单个脚本Apache mod_rewrite是你的朋友。

使用不同的http方法创建请求时,请使用任何REST客户端,例如Postman for Chrome。

编辑:

.htaccess示例:

unsigned long long