将REST URI解析为类/方法

时间:2012-06-26 13:00:23

标签: php .htaccess url rest

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

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

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

2 个答案:

答案 0 :(得分:1)

最佳解决方案是两者的混合:使用.htaccess捕获整个/resources1/resource1ID/resources2/resource2ID部分并重定向到固定的入口点,在此处将其作为参数传递 - 例如,

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

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

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


¹路由:将URL模式映射到控制器操作; here's relevant reading适用于ASP.NET,但这个概念对所有MVC框架都是通用的

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

答案 1 :(得分:0)

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

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