似乎有各种各样的PHP框架声称RESTful设计模式。
我正在寻找一个能够很好地为这三个项目(或它们的等价物)提供可靠解决方案的框架。
要做的第一件事就是能够处理资源解析的URL。
/path/to/resource = controller.action()
第二件事是处理不同类型的请求方法。
GET /path/to/resource = controller.get()
POST /path/to/resource = controller.post()
如果没有请求方法匹配,可能会回退到通用处理程序。
GET /path/to/resource = controller.action()
PUT /path/to/resource = controller.action()
POST /path/to/resource = controller.action()
最后,我看到人们将格式附加到URL的末尾,以帮助框架知道预期的响应类型。
/path/to/resource.html
/path/to/resource.json
人们在标题中传递响应格式或作为URI参数(?format=json
)的其他方式。
这些是必须涵盖的三个项目。但是,它们不必像我刚刚展示的那样处理 - 这些只是示例。
答案 0 :(得分:1)
我一直在研究类似的框架,但在PHP世界中似乎并没有发生太大的事情。 Here是关于PHP REST框架的相关问题。
Recess看起来很有趣,我发现Zend Framework的新REST controllers and routers非常有用。我在Zend组件之上also started implementing an easier approach。基本上你注册了一堆视图渲染器(HTML,JSON和简单形式的XML支持开箱即用,通过接受头解析或用format =?参数覆盖它)和身体解析器(Web Foms和JSON启用) )并基于此界面:
interface Feathry_Rest_Resource
{
public function index($params = null);
public function get($id, $params = null);
public function post($data, $params = null);
public function put($data, $id = null, $params = null);
public function delete($id, $params = null);
}
每个方法返回一个普通数组或对象(使用toArray方法),您可以创建一个RESTful资源。 优点是,您的资源完全与任何Representation分离。 他们甚至不必知道他们正在通过HTTP使用,只要他们遵循 界面。 它仍然是非常阿尔法,似乎并没有太大的兴趣,但它确实有效,所以也许你想尝试一下。
答案 1 :(得分:0)
Recess有一个有趣的方法,使用注释来定义路由。
如果你使用的是PHP 5.3,那么Tonic是一个非常轻量级的框架,专注于REST。它还使用类似于Recess的样式,使用docblocks进行路由。
我个人使用Zend Framework及其Zend_Rest_Route的自定义版本。
这些方法中的每一个也都提供了一些处理响应格式的方法,允许您不仅根据您描述的方法提供内容协商,还可以使用Accept
标题字段来确定哪些格式客户会理解。我在ZF中的个人方法是使用数据结构(基本上是ArrayObject
)和JSON,XML,YAML等的自定义序列化器,并让控制器确定要使用的最佳输出格式。