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

标签 php apache rest url-rewriting

我正在用 php 实现 REST 服务。

Q1。我可以拆分 Controller 和资源吗?

http://myserver/myCtrl.php?res=/items/1

问题 2。如果不是,是否有标准规范(如果存在)用于在 iis、apache、nginx 等上重写以在重写后继续使用 http-verb?

如果不行,怎么解决?

最佳答案

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

http://domain.com/api/[resource]/[id]/[subresource]

我将所有请求传递给带有 .htaccess 文件的前端 Controller ,该文件解析传入的请求并将请求传递给相关 Controller 。所以我的 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);

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

希望这足以让您入门。

关于php - PHP、重写和 http-verbs 上的 REST 实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8834758/

相关文章:

php - Ubuntu 12.04 上的 Apache2 : mysqlnd+mysqli and pdo_mysql - can i have both?

php - Web 服务器上的嵌套算术 MySQL 查询问题

php - 使用来自 Apache libphp5.so 的 .pgpass

linux - Amazon Linux AMI Apache 用户和权限 Web 目录

java - 尝试用 Java 实现一个简单的 JSON Web 服务

php - 从 mySQL 中只获取非空字段

javascript - IP 地址中的国家/地区名称

Apache Mod_ReWrite 突然停止工作

angularjs - 请求的资源不支持 http 方法 'OPTIONS' .?

security - REST API 安全性的当前状态是什么?