用于构建相当复杂的PHP Web服务的设计模式

时间:2011-01-31 14:28:54

标签: php web-services api design-patterns frameworks

我刚刚“完成”用PHP编写相对复杂的Web服务。由于最后一刻的请求,更改,附件,通常情况下,代码库现在有点混乱。

我尝试尽可能轻松地编写代码,以最大限度地提高性能。

因此,我没有使用像Zend这样的任何框架或任何像Doctrine这样的ORM。

我想知道是否存在任何框架或设计模式仅用于在PHP中构建API / Web服务?

我正在考虑一个重构器,我想确保现在我确切地知道我可以正确地构建这个东西。

4 个答案:

答案 0 :(得分:15)

我提前为我自己的框架自我引用道歉 - 除非我不使用任何其他内容,否则我无法帮助你。我不是广告,因为它不公开。

正如我在评论中所说,我认为一个好的网络前端框架并不意味着它是一个糟糕的网络服务框架。

因为我对任何流行的PHP框架(CodeIgniter,CakePHP,Kohana)处理请求以及它们的大小的限制性方式不满意,所以我编写了一个仅用于两个目的的框架,进程请求并确定要采取的操作,然后将该操作的代码与视图分开(响应)

我使用的设计模式是:

  1. 重写所有URL(mod_rewrite)并传递给您的执行入口点。
  2. 您的入口点会设置它将识别和处理的路径。 I.E.对于Web服务:
    • /users - 用户列表
    • /user/* - 由*所在的值标识的用户。
    • /user/*/delete - 删除用户
    • /posts - 列出帖子
    • /post/* - 查看帖子*
  3. 随着您指定函数的路径,I.E。如果HTTP方法为UserActions::saveUser ,则要执行 POST。它仅在POST上执行的原因是为了使输出和输入具有相同的URL。
  4. 该路径还指定了视图。这是将发送到浏览器的响应正文。它可以呈现为直接PHP,也可以插入模板引擎。对于Web服务,所有路径都可能使用单个视图,以输出格式(JSON,XML,等等)呈现数据。视图可以只是一个PHP方法,不需要指定模板文件。
  5. 对于Web前端,视图可以有一个包装它的父视图(从里到外创建页面)。
  6. 最后一点是安全。您可以定义要应用于任何路径的安全类型。安全类型只指定检查授权的功能(如SecurityManager::authorize),如果返回false,则会重定向到您选择的路径。
  7. 我认为这种设计模式适用于Web服务的原因是:

    • 允许您使用单入口点,但可以与多个入口点一起使用(如果需要,可以进行优化)。
    • 不,假设您希望您的URL与您的对象模型匹配,就像大多数主要框架一样(一个值得注意的例外是Zend,如评论中所述)。
    • 轻松适应REST(而不仅仅是检查POST,也检查其他方法。)
    • 删除任何HTML都感觉非常自然,因为在此模式中,响应与处理完全分开。
    • 这可以在几个班级完成。

答案 1 :(得分:0)

Imho,每个基于MVC的“事物”都可以真正帮助你。

如果你真的不想使用已经存在的任何东西(尝试CakePHP!),那么mvc之后的代码可以帮助你在更多层上拆分应用程序的逻辑,并保持更多可读和可调试。

当然,也可以用更好的模式编写糟糕的代码,这取决于你!

答案 2 :(得分:0)

我认为您可以使用简单Web应用程序使用的相同模式。 restful服务具有与Web应用程序不同的接口,但该接口下的所有内容都是相同的。您可以将restful服务转换为Web应用程序,如下所示:

METHOD host/resource/data => host/resource/METHOD?data

资源是控制器,METHOD是动作。 例如:

GET http://library.com/books/123 => http://library.com/books/get?123

所以你可以使用前端控制器和MVC。

答案 3 :(得分:-1)

Google快速浏览

我从未使用过任何这些