构建适用于app和web界面的后端

时间:2016-10-07 00:20:03

标签: rest api architecture

假设我要设计一个像Airbnb这样的平台。他们在各种移动平台上都有一个网站和原生应用程序。

我一直在研究应用程序设计,从我收集的内容来看,最有效的方法是为后端构建一个API,就像使用类似节点的REST API一样。 js,SQL或mongoDB。然后将在每个平台上本地开发font-end,从而调用API端点以显示和更新数据。这种设计听起来非常适合移动开发,但构建使用相同API的网站的最佳方法是什么?

我可以想到三种方法:

  1. 像AangularJS一样使用完全客户端的东西来创建单页面应用程序前端,它直接绑定到REST API后端。这似乎没问题,但我不喜欢单页应用程序的想法,而更喜欢更传统的方法
  2. 创建一个普通的Web应用程序(在PHP,python,node.js等中),但它不是将数据绑定到像mySQL这样的典型后端,而是基本上充当REST API的接口。例如,当您访问www.example.com/video/3时,服务器将调用相应的REST端点(即api.example.com/video/3/show)并为用户呈现HTML。这似乎是一种混乱的方法,特别是因为大多数Web框架都设计用于SQL后端。
  3. 直接将Web界面与REST API结合使用。例如,端点example.com/video/3/show可以返回html或json,具体取决于HTTP标头。优点是您可以共享大部分代码,但代码会变得更加复杂,您无法将Web界面与API分离。
  4. 这种情况的最佳方法是什么?您是否选择将Web应用程序与REST API完全分离?如果是这样,你如何优雅地在两者之间建立联系?或者您选择将REST API和Web界面合并为一个代码库?

3 个答案:

答案 0 :(得分:0)

第一个和第二个选项对我来说似乎都是合理的,因为将后端API与客户端(包括您的网站)分离有一定的优势。例如,你可以为每个项目组建专门的团队,如果web / api上有bug,你只需要发布那个项目,而不是两者都有。

说你正在公开你的API。如果你发布了一个破坏向后兼容性的版本,那么你可以通过一个解耦的web应用程序来检测更早的版本(比如分段环境,因为你是在内部开发的)。但是,如果它们紧密耦合,它们可能工作得很好,并且只有在生产中发布后,你才会发现你已经打破了其他客户。

答案 1 :(得分:0)

我想说第一个选项更适合作为通用方法。可以使用服务器端渲染技术解决SPA首次加载延迟问题。

对于第二个选项,你将不得不面对可伸缩性,cpu性能,用户会话(当然不是因为应该是无状态的休息api),缓存问题在你的rest api服务和普通的网站节点实例上都有问题(可能并不是全部缓存)案件)。在大多数情况下,这个中间后端层是不必要的,在最近的浏览器版本中执行所有操作没有任何技术限制。

第三种选择违反了关注点的分离,在您的案例中,表示来自数据模型/商务逻辑。

答案 2 :(得分:0)

  1. 这通常是一种优先考虑的方式,但应该对SPA有很好的掌握。
  2. 从性能角度添加冗余图层。你基本上会再提出两次请求。
  3. 这可能适用于超级简单的用户界面,只需将您的REST API结果序列化为不同的格式,但我相信您需要丰富的用户界面,从实施和维护的角度来看,这将是一场噩梦。
  4. 建议的解决方案:
    提取核心逻辑。将它放入一个单独的项目/程序集中,并在REST API和UI中重用它。通过这种方式,您将能够重用UI和REST API相同的业务逻辑,并分别保留表示内容,这与UI和REST API不同。

    希望它有所帮助!