我正在尝试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等。
编辑:我应该补充一点,我希望在没有框架的情况下这样做。
答案 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参数。在规则的最后是标记,L
和QSA
。 L
标志告诉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