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

Eve*_*oob 21 php api frameworks design-patterns web-services

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

我尝试尽可能轻松地编写代码并以最大化性能的方式编写代码.

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

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

我正在考虑一个重构器,我想确保现在我确切地知道我能够正确地构建这个东西.

Nic*_*ole 15

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

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

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

我使用的设计模式是这样的:

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

我相信这种设计模式适用于Web服务的原因:

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

  • 由于您列出的原因,我编写了自己的框架. (4认同)