REST的基础知识与php

use*_*854 6 php rest

我正在尝试学习REST的基础知识,我发现了一个非常好的教程(至少它帮助我理解了基础知识).这是我一直关注的教程.

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

任何人都可以解释为什么使用它

explode("/", $path, 2); 
instead of
explode("/", $path);
Run Code Online (Sandbox Code Playgroud)

对于这个例子,他们会生成相同的数组,但如果它是一个更长的路径,如果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");
}
Run Code Online (Sandbox Code Playgroud)

dec*_*eze 6

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

restaurant/42      -> restaurant, 42
restaurant/item/3  -> restaurant, item/3
foo/bar/baz/boom   -> foo, bar/baz/boom
Run Code Online (Sandbox Code Playgroud)

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

restaurant/42      -> restaurant, (42)
restaurant/item/3  -> restaurant, (item, 3)
foo/bar/baz/boom   -> foo, (bar, baz, boom)
Run Code Online (Sandbox Code Playgroud)

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

你可以用这个得到同样的效果:

$params   = explode('/', $path);
$resource = array_shift($params);
Run Code Online (Sandbox Code Playgroud)

  • @user正如我所说,有*更简单的方法来做到这一点.但是代码作者的方式也是有效的.他只是以不同的方式思考问题,并使用不同的方法得出解决方案.或者也许他认为这样他想要做的事情的想法会更好地传达,这使得代码更具可读性.它没有其他原因. (2认同)