我正在为我的应用程序开发一个api层。我设计了一个结构,需要一些建议/反馈。您可以在底部找到结构的基本实现。
以下是我对结构的要求:
考虑到这些要求,我已将Decorator模式应用于我的API层。我不确定我是否设计了正确的结构,需要确定它。
要求清单中的最后一项未在下面的实施中介绍,因为我仍在试图弄清楚如何做到这一点。
你怎么看?我在正确的道路上吗?<?php
// Interfaces
interface I_API_Command {}
// Abstract classes
abstract class A_API_Command implements I_API_Command
{
abstract public function run();
}
abstract class A_Decorator_API_Command implements I_API_Command
{
protected $_apiCommand;
public function __construct(I_API_Command $apiCommand) {
$this->_apiCommand = $apiCommand;
}
abstract public function run();
}
// Api command class
class APIC_Tasks_Get extends A_API_Command
{
public function run() {
// Returns tasks
}
}
// Api command decorator classes
class APICD_Auth extends A_Decorator_API_Command
{
public function run() {
// Check authentication
// If not authenticated: return error
// If authenticated:
return $this->_apiCommand->run()
}
}
class APICD_JSON_Formatter extends A_Decorator_API_Command
{
public function run() {
return json_encode($this->_apiCommand->run());
}
}
// Usage
$apiCommand = new APICD_JSON_Formatter(new APICD_Auth(new APIC_Tasks_Get()));
$apiCommand->run();
?>
答案 0 :(得分:2)
在我看来......我认为旧的经典MVC就够了......
API命令的响应可能需要以不同的格式进行格式化 格式(JSON,XML等)
控制器将读取请求并更改视图以输出所选格式的信息。或者您可以将请求传递给View,视图将更改输出格式。
某些API命令可能需要身份验证,有些可能不需要
这也是控制器的任务,用于读取和验证请求。如果用户未经过身份验证,则会更改响应
每个API命令都应该通过插件打开扩展(事件通知,输入/输出参数的过滤等)
现在这是棘手的部分..你可以修改控制器并实现策略模式。如果您计划不断更换插件,这是个好主意。
在我的情况下,我有多个控制器,我使用一个控制器工厂来读取请求并返回一个管理该请求的控制器。
我不确定你想如何实现你的插件。当你说Notification on events
时,我觉得你可以使用观察者模式,filtering of input/output paramters
似乎是控制者的任务。
我希望这会有所帮助。祝你好运