假设我要设计一个像Airbnb这样的平台。他们在各种移动平台上都有一个网站和原生应用程序。
我一直在研究应用程序设计,从我收集的内容来看,最有效的方法是为后端构建一个API,就像使用类似节点的REST API一样。 js,SQL或mongoDB。然后将在每个平台上本地开发font-end,从而调用API端点以显示和更新数据。这种设计听起来非常适合移动开发,但构建使用相同API的网站的最佳方法是什么?
我可以想到三种方法:
www.example.com/video/3
时,服务器将调用相应的REST端点(即api.example.com/video/3/show
)并为用户呈现HTML。这似乎是一种混乱的方法,特别是因为大多数Web框架都设计用于SQL后端。example.com/video/3/show
可以返回html或json,具体取决于HTTP标头。优点是您可以共享大部分代码,但代码会变得更加复杂,您无法将Web界面与API分离。这种情况的最佳方法是什么?您是否选择将Web应用程序与REST API完全分离?如果是这样,你如何优雅地在两者之间建立联系?或者您选择将REST API和Web界面合并为一个代码库?
答案 0 :(得分:0)
第一个和第二个选项对我来说似乎都是合理的,因为将后端API与客户端(包括您的网站)分离有一定的优势。例如,你可以为每个项目组建专门的团队,如果web / api上有bug,你只需要发布那个项目,而不是两者都有。
说你正在公开你的API。如果你发布了一个破坏向后兼容性的版本,那么你可以通过一个解耦的web应用程序来检测更早的版本(比如分段环境,因为你是在内部开发的)。但是,如果它们紧密耦合,它们可能工作得很好,并且只有在生产中发布后,你才会发现你已经打破了其他客户。
答案 1 :(得分:0)
我想说第一个选项更适合作为通用方法。可以使用服务器端渲染技术解决SPA首次加载延迟问题。
对于第二个选项,你将不得不面对可伸缩性,cpu性能,用户会话(当然不是因为应该是无状态的休息api),缓存问题在你的rest api服务和普通的网站节点实例上都有问题(可能并不是全部缓存)案件)。在大多数情况下,这个中间后端层是不必要的,在最近的浏览器版本中执行所有操作没有任何技术限制。
第三种选择违反了关注点的分离,在您的案例中,表示来自数据模型/商务逻辑。
答案 2 :(得分:0)
建议的解决方案:
提取核心逻辑。将它放入一个单独的项目/程序集中,并在REST API和UI中重用它。通过这种方式,您将能够重用UI和REST API相同的业务逻辑,并分别保留表示内容,这与UI和REST API不同。
希望它有所帮助!