【问题标题】:DELETE http method with REST API using PHP使用 PHP 使用 REST API 删除 http 方法
【发布时间】:2012-08-31 13:57:28
【问题描述】:

我正在制作一个小型应用程序,只是为了掌握 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 文件中,当我回显该方法时,不会像 POST 和 GET 方法那样显示“DELETE”。

我发现 this resource 与 DELETE 有关,据我所知,标识符将通过 URL 传递,但应该收到一些方法,就像 GET 和 POST 一样(这意味着当我回显该方法时,我的代码应该显示 DELETE) .

【问题讨论】:

  • 您正在运行什么服务器 - 有时您需要在服务器上允许 DELETE http 动词。
  • 这是 html 4.0 规范的限制。除了GETPOST,您根本无法使用。看到这个答案:stackoverflow.com/a/166501/1515540
  • @Sohnee 我在 localhost 上使用 apache
  • @complex857 我应该只使用 POST 并设置一个隐藏变量吗?然后,检查名为 DELETE 的隐藏变量,如果存在,则将其视为 DELETE 方法?
  • 是的,这是框架使用的常见解决方法,如 rails 或 facebook 的 javascript sdk 图形 api,链接答案中也有概述。

标签: php api rest http http-delete


【解决方案1】:

这是PUTDELETE 的最新消息。

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

如果您使用后台 AJAX 调用,或者实际上如果您不使用浏览器发出请求,则可以使用全套 HTTP 动词,包括 PUTDELETE。对此的一个警告是,在 IIS 上,您可能需要更改设置以允许这些动词,因为您可以设置服务器接受的特定动词。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2016-01-25
    相关资源
    最近更新 更多