【问题标题】:RESTful PHP Frameworks that support Resources, Methods, and Formats支持资源、方法和格式的 RESTful PHP 框架
【发布时间】:2012-01-22 17:07:38
【问题描述】:

似乎有各种声称 RESTful 设计模式的 PHP 框架。

我正在寻找一个能够很好地为这三个项目(或它们的等价物)提供可靠解决方案的框架。

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 rest frameworks routing


【解决方案1】:

我一直在研究类似的框架,但 PHP 世界似乎没有太多进展。 Here 是关于 PHP REST 框架的相关问题。

Recess 看起来很有趣,我发现 Zend 框架的新 REST controllers and routers 非常有用。我also started implementing an easier approach 在 Zend 组件之上。基本上,您注册了一堆视图渲染器(开箱即用地支持 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 资源。 优点是,您的资源与任何表示完全分离。 他们甚至不必知道他们正在通过 HTTP 使用,只要他们遵循 界面。 它仍然是 Alpha 版,似乎并没有太大的兴趣,但它确实有效,所以也许你想试一试。

【讨论】:

  • 谢谢,让我看看这些东西。
【解决方案2】:

Recess 有一种有趣的方法,使用注释来定义路由。

如果您使用的是 PHP 5.3,那么Tonic 是一个非常轻量级的框架,专注于 REST。它还使用与 Recess 类似的样式,使用 docblocks 进行路由。

我个人将 Zend Framework 与他们的 Zend_Rest_Route 的自定义版本一起使用。

其中的每一个都在某种程度上提供了一些响应格式的处理,允许您提供内容协商,不仅基于您描述的方法,而且通过使用 Accept 标头字段来确定客户端将使用的格式理解。我在 ZF 中的个人方法是使用带有 JSON、XML、YAML 等自定义序列化程序的数据结构(基本上是 ArrayObject),并让控制器确定要使用的最佳输出格式。

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 2011-04-25
    • 2018-06-24
    • 2013-03-19
    • 2014-08-12
    • 2012-09-27
    • 2014-01-28
    • 2016-07-17
    相关资源
    最近更新 更多