使用PHP使用REST API删除http方法

时间:2012-09-06 17:26:30

标签: php api rest http http-delete

我正在制作一个小应用程序,只是为了掌握REST,我在使用DELETE方法时遇到了一些麻烦。我之前从未使用它,所以我不确定它是如何表现的。

无论如何,我跟着this tutorial来了解基础知识。我对它进行了修改,而不是使用预先制作的数组,用户可以提交数据并从MySQL数据库中查看它。

我有3个文件:

  • server.php - 确定所用方法并采取相应行动的“API”

  • input.php - 显示供用户输入数据的表单

  • viewinput.php - 显示已输入的输入。

我正在尝试在viewinput.php上放置一个“删除”按钮,以便删除一个条目。这是我的代码,显示输入的信息。

while ($result = mysql_fetch_array($sql)){
        ?>
        <tr><td><? echo $result['id']." "; ?></td><td><? echo $result['text']; ?></td>
        <form method = "delete" >
            <td><input type="submit" name="delete" value="delete"></input></td></tr>
            <input type="hidden" name = "hidden_delete" value="<? echo $result['id']; ?>"></input>
        </form>
        <?
    }

现在,在我的server.php文件(API)中,这是第一个被调用的函数,它确定方法并将URL分解为组件以供进一步处理。

public function serve() {
    $uri = $_SERVER['REQUEST_URI'];
    echo $method = $_SERVER['REQUEST_METHOD'];   //GET and POST are displayed, DELETE isn't
    $paths = explode('/', $this->paths($uri));
    array_shift($paths); // 
    $resource = array_shift($paths);

当我按下删除按钮时,URL来自

/rest/viewinput

/rest/viewinput?delete=delete&hiddendelete=3 //assuming I deleted the 3rd entry

根据我的理解,提交DELETE方法时,URL应为/ rest / viewinput / 3

在我的server.php文件中,当我回显该方法时,“DELETE”不会像POST和GET方法那样显示。

我找到了关于DELETE的 this resource,根据我的理解,标识符将通过URL传递,但是应该有一些方法像GET和POST一样接收(这意味着当我回显时,我的代码应显示DELETE法)。

1 个答案:

答案 0 :(得分:3)

以下是PUTDELETE的当前下限。

如果您是“普通浏览”,大多数浏览器实际上并不使用这些动词中的任何一个。然而,他们支持XML Http请求(即AJAX)。因此,从客户端来看,您无法直接在HTML表单元素上使用PUTDELETE并使其正常工作。您需要使用Complex857建议的解决方法,即在请求中包含意图。

如果您正在使用后台AJAX调用,或者如果您没有使用浏览器发出请求,则可以使用完整的HTTP谓词套件,包括PUTDELETE。有一点需要注意的是,在IIS上,您可能需要更改设置以允许这些动词,因为您可以设置服务器接受的特定动词。