PHP中的内部API,包含的替代方案?

时间:2013-05-28 19:53:12

标签: php api http curl

我有一台服务器有十多个不同的独立应用程序,都是用PHP编写的。这些应用程序通过API相互通信。顶部有一个应用程序让它们与服务器外部的客户端进行通信,全局看起来像这样:

http://i.stack.imgur.com/VPsiW.png

必须处理命中的应用程序以JSON响应App 1,App 1根据JSON中的信息为命中生成适当的答案,例如网页,图像或纯JSON。

如果应用程序需要与另一个应用程序通信,他将使用cURL发送HTTP请求。基本上他成为自己服务器上的客户。我知道这种方法比使用直接函数(如Include或Require)消耗更多资源。但是当我使用这些功能时,我失去了许多独立原则。

我喜欢坚持独立原则的原因是我喜欢与外部初级程序员合作。我不希望他们被迫使用像OOP,类等的东西。我想对他们说:“这是输入,我希望输出是这样的,创建一个PHP应用程序来实现它”。< / p>

我的问题是:

  • 与直接函数(如Include或Require?
  • )相比,HTTP方法是否会使用更多资源
  • 除了Include或Require之外,还有更好的方法可以用PHP构建内部API吗?

1 个答案:

答案 0 :(得分:2)

您的问题的答案:

  1. 这取决于很多事情,包括但不限于:

    • 服务器的位置
    • 服务器之间的节点数和节点质量
    • 服务器的延迟
    • 用于传达信息的格式

    为了让您了解这一切是如何实现的,请考虑所有应用程序都在同一个盒子上的虚拟主机的简单情况。您正在使用curl从app2点击myserver.com/app1/。您可能不知道的是:

    • 强制将DNS查找到myserver.com
    • 在循环回到
    • 之前,将一直走到路由器的公共接口

    而不是早期的情况,请考虑以下情况:您正在使用curlmyserver2.com点击myserver.com。这两者一起在VPN上,但两者都有一个公共接口,其中myserver.commyserver2.com分别绑定。结果?当你可以通过VPN进行隧道传输时,你将通过广域网。

  2. 在所有情况下,如果呼叫转到WAN,您将在每次通话约10毫秒到约50毫秒之间产生任何延迟。

    include这样的“直接函数”解决了一个完全不同的问题,但是,它们减少了整个HTTP请求开销。应始终首选直接实例化,并且您的第二个最佳选择应该是使用redis之类的内容缓存HTTP调用。

    问题二有一个简单的答案:是的,没有构建一个。如果通过“内部API”,您构建的只是负载均衡器,请考虑使用负载均衡器。如果您正在构建内容中介,请考虑将其抽象出去并让您的开发人员做他们擅长的事情