首页 文章

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

提问于
浏览
0

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

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

我能想到三种方法:

  • 使用类似AangularJS的完全客户端的东西来创建单页面应用程序前端,它直接绑定到REST API后端 . 这似乎没问题,但我不太喜欢单页面应用程序的想法,而是更喜欢更传统的方法

  • 创建一个普通的Web应用程序(在PHP,python,node.js等中),但它不是将数据绑定到像mySQL这样的典型后端,而是基本上充当REST API的接口 . 例如,当您访问 www.example.com/video/3 时,服务器将调用相应的REST endpoints (即 api.example.com/video/3/show )并为用户呈现HTML . 这似乎是一种混乱的方法,特别是因为大多数Web框架都设计为使用SQL后端 .

  • 直接使用REST api绑定Web界面 . 例如, endpoints example.com/video/3/show 可以根据HTTP标头返回html或json . 优点是您可以共享大部分代码,但代码会变得更加复杂,您无法将Web界面与API分离 .

这种情况的最佳方法是什么?您是否选择将Web应用程序与REST API完全分离?如果是这样,你如何优雅地将两者联系起来?或者您选择将REST API和Web界面合并为一个代码库?

3 回答

  • 0
    • 这通常是一种优先考虑的方式,但应该对SPA有良好的掌握 .

    • 从性能角度添加冗余层 . 您基本上会再次提出两次请求 .

    • 这可能适用于超级简单的用户界面,只需要将您的REST API结果序列化为不同的格式,但我相信您需要丰富的用户界面,从实施和维护角度来看,这将是一场噩梦 .

    建议的解决方案:
    提取核心逻辑 . 将它放入一个单独的项目/程序集中,并在REST API和UI中重用它 . 通过这种方式,您将能够重用UI和REST API相同的业务逻辑,并分别保留表示内容,这对UI和REST API是不同的 .

    希望能帮助到你!

  • 0

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

    假设您使用API上市 . 如果你发布了一个破坏向后兼容性的版本,你可以通过一个解耦的web应用程序来更早地检测到它(比如在你内部开发的情况下,分段环境) . 但是,如果它们紧密耦合,它们可能工作得很好,并且只有在 生产环境 中释放后才会发现你已经打破了其他客户端 .

  • 0

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

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

    第三种选择违反了关注点的分离,在您的情况下,表示来自数据模型/商务逻辑 .

相关问题