php - 在 PHP 的 RESTful API 中路由

标签 php url-routing restful-url

我对 PHP MVC 有点熟悉。比如说,我有一个这样的 Controller :

class Customers{

    public function method1( param1, param2, param3, ..., param_n ){

    }
}

在我的引导页面中,我可以像这样获取浏览器 URL:

$url = explode('/', filter_var(rtrim( $_GET['url'], '/' ), FILTER_SANITIZE_URL));

我做 $controller = $url[0]$method = $url[1]$url 中第二个索引之后的任何其他元素都是参数,可以收集到一个数组变量中,比如 $params。然后我像这样路由到相关的 Controller 方法和参数:

call_user_func_array([$controller, $method], $params);

请注意:以上代码仅供说明之用。我总是在现实生活中进行检查。这些检查未在此处显示,因此请不要将上述示例用于严肃的项目。

现在,我想使用 MVC 模式实现一个 RESTful API。我已经知道的:

  1. 不涉及浏览器,所以 $_GET['url'] 不在其中。
  2. 端点是从$_SERVER['REQUEST_URI']获取的
  3. 方法从$_SERVER['REQUEST_METHOD']获取

如何路由到端点,例如 customers/{12345}/orders 以获取 ID 为 12345 的特定客户的订单?

我该怎么做?

最佳答案

实现您想要的最快方法是使用 FastRoute .
但这哪里有趣了:)

That said, I am a but confused about the premise of yours. Is it a REST API, which will be consumed by some other code (like in a phone or a 3rd party web app), or is it a proper website, where you just want to get pretty URLs?

Because if it's the former case, then making fancy URL parsing is completely pointless. Instead of messing round with URLs, you should be reading this article. Real REST API does not need a fancy URL parsing.

我假设您实际制作的是一个合适的网站,但具有漂亮的 URL。

首先,您必须实现一个路由机制,该机制采用正则表达式模式列表,将它们与您提供的 URL(您可以从 $_GET['url'] 中提取,或者也许$_SERVER[REQUEST_URI](您的代码实际上不会关心 URL 是从哪里收集的……您不应该在函数/类中访问超全局变量)。

一个简单的版本在 this answer 中解释。 .懒得全部重写=P

第二个(也是高度可选的)部分是创建代码,它将采用人类可读的路由符号(例如:/users/{id|[0-9]+} ) 并将其转换为正则表达式,您的路由机制可以使用

如果您决定使用人类可读的符号,那么有两个主要方向:

  • 内联符号(参见上面的示例或 FastRoute)
  • 带符号的配置文件(可能是 JSON 或 YAML)

至于“最终结果可能是什么样子”,你可以看看代码示例here .这将说明路由器公共(public)接口(interface)的可用选项之一。

长话短说

你的问题含糊不清,很难理解到底什么对你有帮助。

关于php - 在 PHP 的 RESTful API 中路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34494174/

相关文章:

url - 如何为子域实现 grails Url 映射

django - 为什么在 '/' 之后包含 '$' 的 URL 返回页面未找到错误 (404)

web-services - 设计 Restful 服务

资源不同版本的 RESTful URL

php - 显示来自 MySQL 的 blob PNG 图像

php - CodeIgniter - 从 n-2-n 关系表中获取并显示数据

php - 发送 POST 请求 wget

kotlin - 为典型的 REST 实现嵌套 Ktor 路由匹配器和处理程序的正确方法是什么?

javascript - 从服务器获取完整的 url

validation - 通过 REST API 验证/更改密码