PHP上的REST实践,重写和http-verbs

Tes*_*son 5 php apache rest url-rewriting

我正在用php实现REST服务。

q1。我可以拆分控制器和资源吗?

http://myserver/myCtrl.php?res=/items/1
Run Code Online (Sandbox Code Playgroud)

q2。如果没有,在iis,apache,nginx等上进行重写的标准规范(如果存在)是否可以在重写中保留http-verb?

如果没有,该如何解决?

Mar*_*ean 4

对于 API(我有一个这样的框架),我倾向于使用如下所示的 URL 结构:

http://domain.com/api/[资源]/[ id ]/[子资源]

我使用.htaccess文件将所有请求传递到前端控制器,该文件解析传入请求并将请求传递到相关控制器。所以我的index.php最简单的看起来类似于以下内容:

<?php

$request = explode('/', trim($_SERVER['REQUEST_URI'], '/'));

$resource_name = ucfirst($request[0]).'Controller';
$http_verb = strtolower($_SERVER['REQUEST_METHOD']);

$controller = new $resource_name;

$response = call_user_func_array(array($controller, $http_verb), array($request));

header('Content-Type: application/json');
echo json_encode($response);
Run Code Online (Sandbox Code Playgroud)

因此,如果您调用http://domain.com/api/news,那么它将尝试实例化一个名为 的类NewsController,如果是GET请求,则实例化get()该类的方法,或者post()对于POST请求,等等。然后,该调用的响应将以 JSON 形式返回给客户端。

希望这足以让您开始。