REST的基础知识与php

时间:2012-08-27 12:42:47

标签: php rest

我正在尝试学习REST的基础知识,我发现了一个非常好的教程(至少它帮助我理解了基础知识)。 This is the tutorial I've been following

无论如何,在此代码段中,作者展示了网站如何使用www.example.com/restaurant/42 instead of /?restaurant_ID=42之类的基础知识。

任何人都可以解释为何使用

explode("/", $path, 2); 
instead of
explode("/", $path);

对于这个例子,他们会生成相同的数组,但如果它是一个更长的路径,如Restaurant/item/3怎么办?你不想分开一切吗?正如您所看到的,在这个区块中,他们确实使用了爆炸而没有定义限制。第一个仅仅是资源吗? (我猜控制器是否是MVC)

<?php
// assume autoloader available and configured
$path = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
$path = trim($path, "/");
@list($resource, $params) = explode("/", $path, 2); //why is limit used here?

$resource = ucfirst(strtolower($resource));
$method = strtolower($_SERVER["REQUEST_METHOD"]);
$params = !empty($params) ? explode("/", $params) : array();  //no limit here?

if (class_exists($resource)) {
 try {
    $resource = new $resource($params);
    $resource->{$method}();
}
catch (Exception $e) {
    header("HTTP/1.1 500 Internal Server Error");
}
}
else {
header("HTTP/1.1 404 File Not Found");
}

1 个答案:

答案 0 :(得分:6)

首先将整个路径拆分为资源 params 变量。 $resource将包含第一个元素,$params其余元素。例如:

restaurant/42      -> restaurant, 42
restaurant/item/3  -> restaurant, item/3
foo/bar/baz/boom   -> foo, bar/baz/boom

然后,$params字符串进一步细分为单个项目:

restaurant/42      -> restaurant, (42)
restaurant/item/3  -> restaurant, (item, 3)
foo/bar/baz/boom   -> foo, (bar, baz, boom)

基本上它正在处理特殊的第一部分。

你可以得到同样的效果:

$params   = explode('/', $path);
$resource = array_shift($params);