以API为中心的网站是否存在速度劣势

时间:2016-07-01 11:49:42

标签: php api curl model-view-controller

我正在构建一个MVC Web应用程序(让我们称之为xyz.com)。我希望它也能通过同一服务器上的API支持移动应用程序(让我们称之为api.xyz.com)。

我对如何构建网络应用与API的结构感到困惑:

  1. 网络应用是否应使用API​​查询数据库?或者它应该独立执行它们(比如使用模型)?我的意思是,如果流程是(用户>控制器> API>数据库)或(用户>控制器>模型>数据库)?
  2. 如果我们使用API​​查询数据库,您将如何查询API?你会使用像cURL这样的东西吗?
  3. 如果我们使用cURL,那会不会减慢进程? (因为我们正在向控制器发出第二个请求)?什么是理想的做法?
  4. 我已经尝试过阅读以API为中心的网络应用,但网上没有太多关于此的信息。

    任何指导都将不胜感激。

2 个答案:

答案 0 :(得分:2)

因为我没有足够的评论来评论我只是把我的想法留在这里。

1)我会让网络应用程序使用API​​有两个主要原因:

  • 我不喜欢让多个组件访问我的数据库,你很可能在数据提取上有很多重复的代码,如果你有很多过滤,你可能会犯错误,他们会#39 ;表现不同。
  • 我相信(如果我错了请纠正我),它会更容易提高应用程序而不是数据库的性能。由于API将处理资源,因此比完整的HTML网页更容易缓存内容。

2)为了查询API,我很可能会使用作曲家并找到一个不错的HTTP库,不知道哪一个,因为我有一段时间没有使用php(symfony' s和laravel'如果我记得很清楚,那就太好了。

3)是的,它可能会使这个过程变慢一点,但我相信它不会被用户注意到。如上所述,通过正确的缓存处理,您可以做得很好。

希望我对此有所了解可以提供帮助,如果我在某处错了,请随时在下面的评论中纠正我(不知道我是否能够回应......) )。

度过美好的一天!

答案 1 :(得分:1)

您真的想知道 n层架构和单层架构之间的区别。 n层体系结构由多个层组成,这些层通过内部协议和API连接。 E.g:

  backend                                      frontend
   data   --- HTTP server --- HTTP client --- application --- HTTP server --- browser
application

你可以在那里有更多层。这些层都可以在同一台物理机器上运行,但它们仍然通过HTTP相互通信;更有可能的是,您希望在不同的计算机上运行每个层。

是的,这显然会在通过HTTP与您的数据库后端进行通信时产生一些开销,而不是在同一个PHP进程中进行。但是,这被以下因素抵消:

  1. 缓存内置于此架构中。如果通过使用功能完备的HTTP服务器和客户端正确使用HTTP缓存并且正在使用HTTP缓存机制,则可以极大地减少绝对查询量。实际上,您在前端服务器上的Web服务器上设置了反向代理,因此您的查询将 PHP→curl→Web服务器反向代理→后端服务器。如果反向代理正确缓存,那就是链经常停止的地方,这比在数据库上执行实际查询要快得多。如果后端服务器有效地使用HTTP缓存,它也可能经常以简单的304 Not Modified响应,这也非常快。

  2. 负载分布在更多机器上,从而加速每台机器的运行速度。如果您的前端服务器可以在很大程度上使用缓存数据而无需打扰数据库,那么数据库对于 需要处理的查询来说要快得多。您还可以将前端服务器扩展到许多实例,每个实例都更快,因为它的负载较少。

  3. 这些架构的优势在于此。另一个优点是您还可以直接将内部HTTP API暴露给外部世界(同样,反向代理在这里很有意义)。如果您没有使用内部HTTP API,则必须编写:

    1. 从模型中获取数据并呈现为HTML的控制器和视图。
    2. 一个控制器和视图,它从模型中获取数据并呈现为JSON(或其他)。
    3. 在某种程度上,控制器可以重复使用,只需将视图切换出来,如果其他一切都相同,但通常你会发现你需要复制每个逻辑“事物”以便在一个案例中作为HTML提供服务和JSON在另一个,你需要保持同步。