1

我已经在这个主题上寻找了一段时间,这个具体问题的方式似乎并不多。我确实在数百个我认为可以回答我的问题的答案中找到了一个,但我想确定这一点。我的问题是,处理 REST URI 服务器端的最佳和最常见的方法是什么?

详细地说,如果我有一个 URI,www.example.com/resources/resourceID,我知道我需要设置一个 .htaccess 文件来处理它并将其定向到正确的位置。我只是不确定拥有一个简单地解析 URI 并将请求发送到特定类的 PHP 调度程序是否更干净(即处理所有 HTTP 方法和消费者可以使用的所有可能请求组合的一些巨型 switch 语句)或让 .htaccess 解析它们。也就是说,我是使用 .htaccess 文件将示例 URI 路由到说 restHandler.php 还是只是用正则表达式解析它以转到名为“资源”的类。

这可能会回答我自己的问题,但我对 .htaccess 方法的问题是,像 www.example.com/resources1/resource1ID/resources2/resource2ID 这样的东西很难在正则表达式中捕获,并将其发送到适当的文件,所以我倾向于 PHP 中的处理程序。但是对我来说,拥有一个大的 'ol switch/ifelse 语句来处理我允许的每个可能的组合似乎仍然不干净。这真的是最干净的方法吗?

4

2 回答 2

1

最好的解决方案是两者的混合:用于.htaccess捕获整个/resources1/resource1ID/resources2/resource2ID部分并重定向到一个固定的入口点,在该入口点这将作为参数传递——例如,

example.com/dispatch.php?route=/resources1/resource1ID/resources2/resource2ID

然后,您的 PHP 代码可以利用您希望的尽可能丰富的信息来决定如何处理这些信息,包括它可以在运行时自行收集的信息(例如通过反射)。通常,此调度程序将利用某种路由¹ 来确定应调用哪个控制器和动作,然后使用某种类型的参数绑定² 以使用适当的参数调用该动作。

它也可以通过一个巨大的switch声明来完成,但这可能不是最好的主意。;-)


¹ 路由:将 URL 模式映射到控制器操作;这是适用于 ASP.NET 的相关阅读,但该概念对所有 MVC 框架都是通用的

² 绑定:弄清楚 URL 中的参数如何映射到实现控制器操作的方法的形式参数

于 2012-06-26T13:13:00.560 回答
0

我使用 .htaccess 重写对我的 PHP 路由器的所有请求,该路由器解析 URI 并使用 PHP 的自动加载来加载适当的控制器(传递 URI 的剩余 RESTful 部分)。然后每个控制器负责确定 URI 中的其他内容是操作/参数。

仍然很脏,但它被分成小块。

于 2012-06-26T13:12:20.583 回答