我正在构建一个MVC Web应用程序(让我们称之为xyz.com)。我希望它也能通过同一服务器上的API支持移动应用程序(让我们称之为api.xyz.com)。
我对如何构建网络应用与API的结构感到困惑:
我已经尝试过阅读以API为中心的网络应用,但网上没有太多关于此的信息。
任何指导都将不胜感激。
答案 0 :(得分:2)
因为我没有足够的评论来评论我只是把我的想法留在这里。
1)我会让网络应用程序使用API有两个主要原因:
2)为了查询API,我很可能会使用作曲家并找到一个不错的HTTP库,不知道哪一个,因为我有一段时间没有使用php(symfony' s和laravel'如果我记得很清楚,那就太好了。
3)是的,它可能会使这个过程变慢一点,但我相信它不会被用户注意到。如上所述,通过正确的缓存处理,您可以做得很好。
希望我对此有所了解可以提供帮助,如果我在某处错了,请随时在下面的评论中纠正我(不知道我是否能够回应......) )。
度过美好的一天!
答案 1 :(得分:1)
您真的想知道 n层em>架构和单层架构之间的区别。 n层体系结构由多个层组成,这些层通过内部协议和API连接。 E.g:
backend frontend
data --- HTTP server --- HTTP client --- application --- HTTP server --- browser
application
你可以在那里有更多层。这些层都可以在同一台物理机器上运行,但它们仍然通过HTTP相互通信;更有可能的是,您希望在不同的计算机上运行每个层。
是的,这显然会在通过HTTP与您的数据库后端进行通信时产生一些开销,而不是在同一个PHP进程中进行。但是,这被以下因素抵消:
缓存内置于此架构中。如果通过使用功能完备的HTTP服务器和客户端正确使用HTTP缓存并且正在使用HTTP缓存机制,则可以极大地减少绝对查询量。实际上,您在前端服务器上的Web服务器上设置了反向代理,因此您的查询将 PHP→curl→Web服务器反向代理→后端服务器。如果反向代理正确缓存,那就是链经常停止的地方,这比在数据库上执行实际查询要快得多。如果后端服务器有效地使用HTTP缓存,它也可能经常以简单的304 Not Modified
响应,这也非常快。
负载分布在更多机器上,从而加速每台机器的运行速度。如果您的前端服务器可以在很大程度上使用缓存数据而无需打扰数据库,那么数据库对于 需要处理的查询来说要快得多。您还可以将前端服务器扩展到许多实例,每个实例都更快,因为它的负载较少。
这些架构的优势在于此。另一个优点是您还可以直接将内部HTTP API暴露给外部世界(同样,反向代理在这里很有意义)。如果您没有使用内部HTTP API,则必须编写:
在某种程度上,控制器可以重复使用,只需将视图切换出来,如果其他一切都相同,但通常你会发现你需要复制每个逻辑“事物”以便在一个案例中作为HTML提供服务和JSON在另一个,你需要保持同步。