【问题标题】:REST-like URLs with PHP使用 PHP 的类似 REST 的 URL
【发布时间】:2013-05-07 19:35:42
【问题描述】:

根据我所阅读的有关 RESTful 服务的内容,应该能够使用对带有记录 ID 的 URL 的请求来获取“资源”(如数据库记录),如下所示:localhost /my_records/1。访问这样的 URL 将显示一个网页,其中包含 id 1 的记录信息。

我需要在 PHP/Apache/MySQL 中实现类似的东西,但我对这门语言还是比较陌生。我能创造的最多的是 本地主机/my_records/index.php?id=1。

创建 ["/id"] url 似乎需要创建该文件夹。有什么方法可以实现吗?

【问题讨论】:

标签: php apache rest url


【解决方案1】:

你可以有任何类型的 URL 的 RESTful 服务,你不需要做一个以 id 结尾的 URL,但是这种类型的 URL 更方便和良好的设计原则。

否则这种类型的 URL 也称为“友好 URL”,大多数 PHP 框架都提供这种类型的 URL,例如 Symfony、Code Igniter、Laravel... 提供此功能。

如果你想要这种类型的 URL 而不使用任何 PHP 框架,你可以查看这个答案和回复:How to create friendly URL in php?

在我看来,实现一个好的 REST Api 的一个好的框架是 Code igniter + Phil Sturgeon Rest Client。更多信息:

【讨论】:

  • 谢谢。 mod_rewrite 非常适合我需要做的事情。我现在真的没有时间学习新框架,所以最简单的解决方案就可以了。我将进一步研究框架。谢谢!
【解决方案2】:

将您的网络服务器配置为通过单个 PHP 脚本路由所有请求。这将允许您解析检索到的 URL。由于您使用的是 Apache mod_rewite 是要走的路。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L]

这将通过 index.php 路由对不存在的路径/文件的所有请求(如果您希望将任何内容路由到该脚本,请删除第 2 行和第 3 行)。然后在脚本中你可以通过$_SERVER['REQUEST_URL']访问访问的URL

【讨论】:

    【解决方案3】:

    本质上,您正在寻找的是通常称为请求路由的东西。通常这是通过服务器级别和应用级别的配置组合来实现的。

    • 某种服务器重定向(使用 RewriteRule 或 FallBackResource 指令)将所有请求(或某种格式的请求)定向到要处理它的单个应用程序资源。
    • 用于解析 URI 和 HTTPS 操作(GET、POST、PUT、DELETE、HEAD 等)并确定如何路由请求(即应由哪个控制器处理)的应用程序逻辑
    • 通常有某种逻辑可以根据请求标头中请求的格式(即 JSON/XML/HTML)来格式化响应

    有许多可用的 PHP 框架可以执行此操作,至少您可以寻求指导(如果不完全使用它们的话)。

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 2011-06-24
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多