似乎有很多PHP框架都宣称使用RESTful设计模式。
我正在寻找一个框架,它可以很好地为这三个项目(或它们的等价)提供坚实的解决方案。
1。资源请求
首先要做的是能够处理URL到资源解析。
/path/to/resource = controller.action()
2。请求方法
第二件事是处理不同类型的请求方法。
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()
3。响应格式的
最后,我看到有人在URL的末尾附加格式,以帮助框架知道期望的响应类型。
/path/to/resource.html
/path/to/resource.json
人们通过报头或作为URI参数(?format=json
)传递响应格式的其他方式。
这是三个必须涵盖的项目。但是,它们不必按照我刚才展示的方式处理——这些只是示例。
我一直在研究一个类似的框架,但在PHP世界中似乎没有太多的进展。这里有一个关于PHP REST框架的相关问题。
Recess看起来很有趣,我发现Zend框架的新REST控制器和路由器非常有用。我还开始在Zend组件之上实现一种更简单的方法。基本上你注册了一堆视图渲染器(HTML, JSON和简单形式的XML都支持开箱即用,通过接受头解析或覆盖它与format=?参数)和正文解析器(启用了Web forms和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资源。其优点是,您的资源与任何表示完全解耦。它们甚至不需要知道它们是通过HTTP使用的,只要它们遵循接口。它仍然是非常alpha的,似乎没有太多的兴趣,但它确实有效,所以也许你想试一试。
Recess有一个有趣的方法,使用注释来定义路由。
如果您正在使用PHP 5.3,那么Tonic是一个非常轻量级的框架,主要关注REST。它也使用了与休会类似的样式,使用docblock进行路由。
我个人使用Zend框架的自定义版本Zend_Rest_Route。
它们中的每一个都在某种程度上提供了对响应格式的处理,允许您不仅基于您描述的方法提供内容协商,而且通过使用Accept
报头字段来确定客户端将理解哪些格式。我在ZF的个人方法是使用数据结构(基本上是ArrayObject
)与JSON, XML, YAML等的自定义序列化器一起工作,并让控制器确定使用的最佳输出格式。