【问题标题】:Can you use REST in PHP? If so how? [closed]你可以在 PHP 中使用 REST 吗?如果有怎么办? [关闭]
【发布时间】:2009-10-27 03:32:55
【问题描述】:

我正在开发自己的 PHP 库,我想从我的 API 调用 RESTful Web 服务。这可以在 PHP 中完成吗?如果可以,这样做的基础是什么?

【问题讨论】:

  • +1:抵消反对票,这是一个合理(如果含糊)的问题。
  • 我认为他是在询问有关处理 PUT 和 DELETE 请求方法的问题,所以我认为这不是一个无效的问题。
  • 让问题继续你们这些坚持者;你想在这里证明什么?它有超过 43,000 次浏览,是 PHP + REST 的第五个 Google 结果。不要再扼杀这个网站所代表的 - CLUELESS QUESTIONS。

标签: php rest restful-architecture


【解决方案1】:

因为 REST 是将 HTTP 协议的相同方法应用于客户端-服务器架构的设计,而 PHP 已经非常擅长处理 HTTP 协议请求,例如 GET 和 POST。 PHP 特别适合简化 REST 服务的开发。

记住 REST 是已经存在的相同 http 模式的应用程序。

因此,如果您当前有一个执行以下操作的应用程序:

  1. HTML 表单
  2. PHP 进程
  3. 表格中的 HTML 输出

因此,要使其成为 REST,您需要:

  1. 接受来自网络的参数。这很容易,因为您将以 get 或 post 的形式接收参数......所以它基本上是相同的。

  2. PHP 进程

  3. JSONXML 格式输出。就是这样!

    很简单。

现在困难的部分是使您将生成的 API(函数和 URL)对程序员友好。

在这种情况下,我建议您以 flickr API 为例,它对开发人员非常友好,易于猜测并且具有良好的文档。

有关 API 的更多信息,请查看此演示文稿:How to Design a Good API & Why it Matters (Joshua Bloch)

最后,一个 RESTful API 还应该实现 http 协议的 PUT 和 DELETE 方法当它有意义时

例如,如果您的 api 中有一个删除操作,则该服务应该从 http 协议接收删除方法。而不是作为发布请求的一部分发送操作参数的更常见的事情。

编辑: 将“Php 默认为 REST”替换为“因为 REST 是将 HTTP 协议的相同方法应用于客户端-服务器架构的设计,而 PHP 已经非常适合处理 GET 和 POST 等 HTTP 协议请求。PHP 特别适合简化 REST 服务的开发。"

还添加了最后一点,即当该操作对您的 api 有意义时,您应该实施适当的 PUT 或 DELETE 方法。

【讨论】:

  • -1:抱歉,默认情况下没有一种语言是 REST。例如,在 REST 中,POST 请求与 GET 非常不同,您还需要支持 DELETE 和 PUT。
  • @Jim Ferrans - 为什么必须支持 DELETE?
  • @elviejo - 如果您查看 stackoverflow 的 url,您将看到一个 REST url。这不是 PHP 默认做的,在解析中,因为没有问号。
  • @James Black StackOverflow 进行漂亮的 url 重写这一事实并不会使其或多或少成为 REST。 so.com/questions/1628628 是一个有效的 REST 调用,如下所示:so.com/questions.php?id=1628628 两个调用都使用 http 协议的 get 方法。
  • @Jim Ferrans:在我的回答中添加了一些说明,试图解决您的问题。
【解决方案2】:

您可能想查看这篇文章和后续文章: http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

您的问题非常开放,因此本教程可能是最好的起点。

上面的链接不再有效,请查看本教程:

http://net.tutsplus.com/tutorials/other/a-beginners-introduction-to-http-and-rest/

【讨论】:

  • @kaziTanvirAhsan - 谢谢,提供更好的链接
【解决方案3】:

我开发了一个类,它是 PHP 原生 SoapServer 类的 REST 等价物。

您只需包含 RestServer.php 文件,然后按如下方式使用它。

class Hello
{
  public static function sayHello($name)
  {
    return "Hello, " . $name;
  }
}

$rest = new RestServer(Hello);
$rest->handle();

然后你可以这样调用:

http://myserver.com/path/to/api?method=sayHello&name=World

(请注意,参数在查询字符串中的顺序无关紧要。此外,参数键名和方法名不区分大小写。)

【讨论】:

  • 这个类为什么不区分HTTP协议?
  • 我最初使用它的应用程序中不需要它。随意分叉并改进它。
【解决方案4】:

回到the original source of the term REST 不会有什么坏处,请确保您理解这意味着什么。

【讨论】:

    【解决方案5】:

    如果您正在考虑事物的客户端,我建议您查看 Matt Sukowski 的 PEST。

    您将在 GitHub 上找到存储库: https://github.com/educoder/pest

    还可以查看此线程: PHP REST Clients

    2013/12/13 更新:
    这是一个非常活跃的开源项目,Matt Sukowsky 今年夏天把它交给了新的看守人,因为他觉得自己没有足够的时间,从那时起已经有很多很多的提交。所以 Pest 比以往任何时候都更适合在 PHP 中进行 Rest :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2016-06-02
      • 1970-01-01
      • 2014-05-21
      相关资源
      最近更新 更多