休息Web服务?

时间:2010-09-25 19:27:41

标签: php rest

我打算创建一个安静的Web服务(PHP)。

api/user
api/user/[id]
api/ad
api/ad/[id];
etc

是“用户”和“广告”实际的php文件?如果不是,我怎么能告诉(在我的php文件中)呼叫者称之为“用户”或“广告”? 关于如何创建一个宁静的Web服务的任何好教程? 大多数教程仅涵盖其他Web服务的基础知识。

3 个答案:

答案 0 :(得分:5)

好吧,对于简单的服务,你有一个脚本文件(例如名为index.php)作为入口点,它调度你的函数的各种路径(当然可能在其他PHP文件中)。 使用您在脚本名称后附加的路径之一调用它。 在脚本中,您可以使用$_SERVER['PATH_INFO']来确定该路径。

您可以通过制作仅包含此内容的脚本来尝试这一点:

<?php
    phpinfo();
?>

如果您在Web服务器的浏览器中请求此脚本,您将看到所有相关数据打印在一个很好的列表中。向下滚动到 PHP变量部分,查看您的PATH_INFO

请参阅http://php.net/manual/en/reserved.variables.server.php

<强> EDIT2:
此外,将访问方法限制为HTTP GET POST 可以让您的生活更轻松,因为PHP有​​$_GET$_POST个变量,但不是$_PUT / $_DELETE等。 但是,您可以使用指定方法的特殊变量发送 POST 请求,以便模拟 PUT DELETE HEAD OPTIONS 操作(例如_method=PUT)。

当支持除 GET POST 之外的其他方法时,请使用$_SERVER['REQUEST_METHOD']确定使用的方法并读取与特殊请求一起发送的数据“文件“php://input(例如file_get_contents('php://input'))。

修改
正如tdammers所指出的,Apache RewriteRules对于使您的URL变得漂亮很有用,在这种情况下隐藏脚本的名称(当然,取决于脚本的位置):

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/api/index\.php(/|$)
RewriteRule ^/api/(.*)$ /api/index.php/$1 [QSA,L]

答案 1 :(得分:1)

Apache重写规则可能会派上用场。制定一条规则,将/api下的所有内容路由到/api/index.php,并将网址的其余部分(例如/ad/user)添加为参数。因此,http://example.com/api/ad/user被重写为http://example.com/api/index.php?path=ad/user之类的内容。然后,您的index.php脚本可以简单地选择$_GET['path']并执行相应的操作。

答案 2 :(得分:0)

这两种方法都很好,可以在CakePHP上找到一个很好的宁静服务样本,在蛋糕中你得到的所有文件都通过路由器类。