从REST API构建复杂页面


Building complex pages from a REST API

我正在开发一个PHP Rest API后端和Angular JS前端的应用程序。我想要了解的是使用多个模型的数据渲染页面的最佳实践。例如,如果您正在显示"person"资源的详细页面,那么很容易获得与该人员相关的所有数据。然而,如果你还需要一个侧边栏来显示已经上传的与这个人相关的文档的数量以及已经创建的关于这个人的注释的数量,你会怎么做呢?在更传统的应用程序中,您可以在控制器中收集所有相关数据,然后将其注入要返回的视图中,但是,在同一调用中返回描述人员的数据以及文档和笔记计数等外围数据的RESTful方法不是与此相反吗?是否应该将这些设置为多个api调用以从数据库获取不同的数据对象?在考虑后一种选择时,为了构建单个视图,对api进行多少次单独调用被认为是可接受的?

冷酷无情的事实是,客户端需要有数据来显示它,无论它到达那里的方式是否是"RESTful"。在99.9999999%的情况下,我非常喜欢"RESTful"方法,但也发现有几次它不太适合。在这种情况下,我认为它是合适的。

你所描述的似乎可以通过将与该人员相关的文档、注释、评论、小部件等的总数存储在该人员的实际模型中并根据需要更新它们来完成。根据项目的规模,这可能是必要的。一个单独的请求就可以收集所有这些信息,而且不会感到尴尬,还可以为您在客户端节省大量工作。

另一种选择是做一些$watching或其他事件驱动的请求来获取每种资源类型的列表,这…如果你只是使用计数,那么大多数时候效率会更低。

我在构建我的第一个Angular应用程序时也遇到了同样的问题。RESTful方法并不是"一刀切"的架构风格…为了达到最终结果,通常需要一些偏差。使用Angular可以让你很容易地把这些操作分离到它们自己的控制器和服务提供商中,这样你就可以在这方面实现关注点分离了。

如果最终用户可以独立创建笔记和上传文档,那么我会将它们作为单独的资源保存。如果没有,那么一个单独的调用也不是一件坏事。