Php 当所有数据都来自内部API时,如何高效地构造HTML模板?

Php 当所有数据都来自内部API时,如何高效地构造HTML模板?,php,web,architecture,Php,Web,Architecture,这里是上下文:我们实际上使用的是基本web堆栈,我们的网站使用直接从数据库获取的数据构建HTML模板 出于种种原因,我们将其分为两个项目,一个负责直接与数据库对话,另一个负责显示数据 为了简单起见,一个是API,另一个是客户端 现在我们想知道应该如何向API请求数据。对我们来说,有两种完全不同的选择: 一个请求,一个路由,一个页面。因此,我们将使用一个巨大的对象,其中包含构建相应页面所需的所有内容 一个对一小块数据的请求。例如,在一个列表页面上,我们会请求获取当前登录用户的数据,并显示其名称及其

这里是上下文:我们实际上使用的是基本web堆栈,我们的网站使用直接从数据库获取的数据构建HTML模板

出于种种原因,我们将其分为两个项目,一个负责直接与数据库对话,另一个负责显示数据

为了简单起见,一个是API,另一个是客户端

现在我们想知道应该如何向API请求数据。对我们来说,有两种完全不同的选择:

  • 一个请求,一个路由,一个页面。因此,我们将使用一个巨大的对象,其中包含构建相应页面所需的所有内容
  • 一个对一小块数据的请求。例如,在一个列表页面上,我们会请求获取当前登录用户的数据,并显示其名称及其头像,然后请求获取每一篇文章,请求获取当前页面类别的数据
  • 有些人喜欢第一种选择,我一点也不喜欢。我觉得我们会有很多冗余。我也不确定一个巨大的请求是否比X个微小的请求快那么多。我也不喜欢将数据绑定到特定页面,因为我觉得API应该(在某种程度上)独立于我们的前端网站

    有些人也不喜欢第二种选择,他们担心我们打太多电话会对服务器收费过高,我可以理解这种担心。看起来,如果没有任何冗余,很难正确定义要发送什么、不发送什么的范围。如果我们只发送显示页面所需的内容,那么这不是最后的第一个选项吗?但是发送不必要的信息不是一种浪费吗


    你们觉得怎么样?

    如果获取所有数据足够快,第一种方法会很好。请求越少,应用程序就越快。冗余我想你指的是代码冗余,因为在一个请求中发送相同数量的数据肯定比在10个小的非并行请求(网络开销)中快。若您从UI发送几个并行请求,那个么您可以获得合理的性能增益。你应该考虑到浏览器有一些缺点

    另一种情况是,如果获取某些数据很快,但另一种数据很慢,则可以返回第一个数据,并在UI上显示加载图像,然后在第二个数据到来时加载第二个数据。它将改善用户体验,尽可能快地显示页面

    第二种方法更灵活,因为您可以使用来自其他页面的一些请求。但是它附带了价格逻辑,使得这些请求(收集信息)需要转移到UI代码,从而使其更加复杂。如果你在另一个应用程序(如手机)上需要相同的数据,你必须复制这个逻辑。一般来说,在后端创建这样的代码更容易


    您还可以查看哪些允许您在一个服务中定位业务/域逻辑,以及在另一个服务(或组织服务)中定位“前端友好”逻辑。

    通常很难给您一个客观的答案,这取决于具体情况™. 这实际上取决于您试图实现什么,在什么样的上下文数据将被使用。第一个选项可能更容易实现,并且取决于您获取/处理数据的能力,第二个选项可能很容易实现。确实不建议有很多请求,尤其是使用当前的HTTP实现和创建新请求的成本,但是,您可以使用HTTP缓存,第一个选项也是如此。您可能还对哪一个对您的案例有启发性感兴趣。谢谢您的回答。是的,我指的是代码冗余。顺便说一下,这都是在后端,因为UI将与网站后端对话,而不是直接与API后端对话。所以我想这两个选项在浏览器方面会得到相同的结果。如果后端与另一个后端对话,这是否会改变您对第二个选项的看法?当然,如果这背后有一些逻辑,并且它将改进您的系统,那么后端对后端是好的。有一些基于此的微服务模式,如我在回答中提供的。或者,举个例子,当你有一个消息总线,一个后端应用程序将消息推送到它,另一个应用程序读取消息时——这是服务器到服务器的通信,但通过一些消息协议——而不是http。