Bas*_*saa 0 php class updates automatic-updates
我有一个PHP类,可以与我们正在开发的API进行通信.我不想使用不同的API版本并让用户手动更新PHP类脚本,而是希望自动完成此过程.
此更新必须在找到更新后即时完成.这是我的想法:
这显然意味着PHP类需要对该类所在文件的写权限,因此它可以简单地用新版本覆盖该类.
但旧类现在如何通过新的类版本执行所请求的API请求?在一个完美的世界中,我正在寻找一种不使用eval()的方法,因为此功能在许多主机上被阻止.
详细说明:
$myApi = new MyApi;
$myApi->registerCustomer($customerData);
Run Code Online (Sandbox Code Playgroud)
registerCustomer()函数会执行以下操作:
if (classNotUpToDate) {
downloadNewClass();
registerCustomerthroughNewClass()
} else {
registerCustomerDo();
}
Run Code Online (Sandbox Code Playgroud)
现在我能想到的唯一方法就是:
class MyApi {...为class MyApiUpdate {..$myApiUpdate = new MyApiUpdate;registerCustomer()函数:$myApiUpdate->registerCustomer($customerData);这是实现我想要的唯一方法,无需创建新文件或使用eval()?我不认为这是一个非常漂亮的方法,所以我正在寻找一种更清洁的方法来实现这一目标.
我认为这种方法非常不安全,因此不推荐它.
相反,我建议您的API应该要求在每次请求时发送"API版本"指示符:客户端通知服务器它正在使用的API版本,服务器以类似的方式通知客户端响应它的版本.
使版本尽可能"向上兼容".较新版本的API可以与旧版本通信,并且由于双方自我识别,您确切地知道每个人可以和不可以使用哪些请求.如果你发明了一个取代旧版本的新API调用,那么将它们都留在实现中,即使你"剔除"其中一个或者让旧调用的实现调用更新的代码.
如果必要和适当,可以使用子类实现不同版本的API.
当然,您应该为每个API版本提供测试套件,并且您应该验证所有旧版测试是否继续针对较新版本正确运行.也就是说,没有"回归".
但是,不,没有 "自动动态更新",也没有可写文件.正如他们所说:"不仅'不,'但是,' 地狱,不!'"
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |