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

时间:2011-12-17 17:33:57

标签: php rest frameworks routing

似乎有各种各样的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)的其他方式。

这些是必须涵盖的三个项目。但是,它们不必像我刚刚展示的那样处理 - 这些只是示例。

2 个答案:

答案 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等的自定义序列化器,并让控制器确定要使用的最佳输出格式。