支持资源、方法和格式的RESTful PHP框架


RESTful PHP Frameworks that support Resources, Methods, and Formats

似乎有很多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等的自定义序列化器一起工作,并让控制器确定使用的最佳输出格式。