我正在重组现有的PHP应用程序,以将数据访问(私有API调用)与应用程序本身分开。
这样做的目的是允许Intranet上的另一个应用程序访问相同的数据,而无需复制代码来运行查询等。我还计划让开发人员更容易为当前的Web应用程序编写代码,而只有少数团队成员会为API添加功能。
目前,该应用程序具有这样的结构(这只是众多页面中的一个):
/notes.php
- 获取用户查看备注的页面(主UI页面)/notes.php?page=view&id=6
- 获取注释6的内容/notes.php?page=create
- 创建备注/notes.php?page=delete
- 删除记事/notes.php?page=append
- 附加说明重组后的应用程序将具有以下结构:
/notes.php
/api/notes/6
/api/notes
/api/notes/6
/api/notes
(或者可能是PATCH,取决于是否会发送完整的代表)在Web应用程序中,我正在考虑对https://localhost/api/
上的URL进行HTTP请求,但这看起来非常昂贵。这里有一些代码来阐述我的意思:
// GET notes.php
switch ($_GET['page']) {
case 'view':
$data = \Requests::get(
"https://localhost/api/notes/{$_GET['id']}",
array(),
array('auth' => ... )
);
// do things with $data if necessary and send back to browser
break;
case 'create':
$response = \Requests::post( ... );
if ($response->status_code === 201) {
// things
}
break;
// etc...
}
我读了this discussion,其中一位成员发布了:
开销太大,请勿使用网络进行内部通信。而是使用更容易获得的不同流程之间的通信方式或者你拥有什么。这取决于系统运行当然...现在你可以模仿REST,如果你喜欢但不使用HTTP或网络内部的东西。这就像把鲸鱼扔进迷你厕所一样。
有人可以解释我是如何实现这一目标的吗? Web应用程序和API都在同一台服务器上(至少目前为止)。
或者HTTP开销方面只是一个可忽略不计的问题?
由于安全限制,目前无法直接从JavaScript /浏览器向API发出HTTP请求。
我也看过this question中的两个答案,但有人详细说明这一点会很好。
答案 0 :(得分:0)
HTTP开销很重要,因为您必须经历整页渲染周期。这将包括HTTP服务器开销,单独的进程PHP执行,操作系统网络层等。它是否可忽略不计或取决于您的应用程序类型,流量,基础架构,响应时间要求等。
为了向您提供更好的解决方案,您需要首先提出您考虑此方法的理由。要考虑的因素还包括当前的应用程序架构,要求,使用的框架等。
如果安全性是您最关心的问题,那么这不一定是首先要做的好方法,因为您现在需要将一些与会话相关的数据存储在另一个层中。
此外,尽管有额外的开销,但鉴于正确的缓存机制,最终应用程序可能会更快地执行。这真的取决于你的最终解决方案。
答案 1 :(得分:0)
我正在做同样的应用程序框架。有同样的问题。所以我决定做以下设计:
API->执行然后知道这是一个本地对象。将获取对象的本地物理路径。初始化它,传递数据并将结果返回到上下文中。没有协议开销的远程执行。
例如,如果您希望使用密钥保留加密服务,并且不使用其他应用程序,则可以安全地发送数据并获取加密值;然后始终通过远程api(https://encryptionservice.com/encrypt/this/value)
调用该服务