写点什么

API 后端服务前端的模式介绍

  • 2015-12-31
  • 本文字数:1152 字

    阅读完需:约 4 分钟

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

屏幕更小、有限的数据计划和需要更少请求的移动设备的 web 体验与桌面浏览器有诸多不同。移动设备需要更少往往也是不同的数据,并且可能提供其它交互,比如通过条形码扫描器。这意味着我们需要在 API 后端添加额外的功能,实现对移动设备的支持, Sam Newman 在他的博客文章中如此解释,并描述了 API 后端模式,用于处理不同类型用户体验设备之间的不匹配。

Thoughtworks 的开发者 Newman 描述了一种解决方案,构建一个通用的 API 后端,用于所有类型的用户接口。由于非常不同的需求,虽然在实践中这意味着向后端增加功能和复杂性。但是它也可能成为瓶颈,因为需要对支持的所有设备部署所需的所有变更,它会减慢部署过程。当从事通用后端开发时,有时需要创建一个特殊团队,尤其是后端团队,在 Newman 看来,这会增加问题,现在前端团队需要与一个独立的团队进行沟通,同时这个团队还必须优先考虑来自其他团队的需求。

另一种 Newman 已经看到在使用的解决方案是为每个用户体验开发一个 API 后端。从概念上来讲,一个面向用户的应用由两部分组成,一个在客户端,一个在服务端,也就是服务于前端的后端(BFF 这一术语是由 SoundCloud 的 Phil Calçado 创造的)。

BFF 通常紧密耦合到一个特定的用户接口,二者均由同一个团队维护。当在不同的平台上处理相同类型的用户接口时,比如 Android 和 iOS,Newman 描述了两种方法,一种每个平台一个 BFF,另一种是每种类型的接口一个 BFF。

Newman 更倾向每个平台一个 BFF 这种严格的模型,比如一个用于 Android 和一个用于 iOS。其中值得关注的是这种方法有在 BFF 之间产生大量重复工作而结束的风险,比如相同类型的聚合或者为下游服务接口而产生的相似代码,但是他一点也不担忧这种重复工作,因为它是跨进程壁垒。合并成一个通用的聚焦边缘 API 服务(a general-purpose aggregating Edge API service)是他极力警告和反对的,并指出这种模型已经被一次又一次的证明会导致高度臃肿的代码。

为每个类型的客户端使用一个 BFF,即 Android 和 iOS 共同使用一个 BFF,这种方法他看到 SoundCloud 已经在使用。他对这种方法的顾虑是,随着越来越多类型的客户端,增加了 BFF 臃肿的风险。

同样为 Thoughtworks 工作的 Lukasz Plotnicki 最近写了一篇博客文章,从一体性 Rails 应用转向使用微服务期间 SoundCloud 所做的 BFF 工作

在 Thoughtworks 最新的技术雷达上, BFF 被作为一项值得追求的技术而被提及。

查看英文原文 A Pattern for API Backends Serving Frontends


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2015-12-31 18:008119
用户头像

发布了 92 篇内容, 共 23.7 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

消息队列存储消息数据的MySQL表设计

intelamd

数据中台建设(六):数据体系建设

Lansonli

数据中台 7月月更

Python中关于函数的那点事

Java学术趴

7月月更

Java避坑指南:涉及金钱计算时使用BigDecimal如何避坑

Beaver

大家都在用的plm项目管理软件有哪些

易成管理学

项目管理

一文详解:SRv6 Policy模型、算路及引流

穿过生命散发芬芳

7月月更 SRv6

leetcode 406. Queue Reconstruction by Height 根据身高重建队列(中等)

okokabcd

LeetCode 数据结构与算法 贪心算法

3 分钟掌握 Node.js 版本的区别

pingan8787

JavaScript node.js Vue 前端开发

编写Prometheus HTTP 服务发现有什么要求

耳东@Erdong

Prometheus 服务注册与发现 7月月更

最新发布!阿里巴巴专家亲自撰写,Dubbo 3.0 分布式实战(彩印版)

冉然学Java

Java 分布式 dubbo 框架 RPC 协议实现原理

jQuery 遍历-后代深入解析分析【前端jQuery框架】

恒山其若陋兮

7月月更

vue2升级vue3: TSX Vue 3 Composition API Refs

zhoulujun

Vue3 Ref JSX tsx 子组件

透过开发抽奖小程序,体会创新与迭代

小院里的霍大侠

创业 前端开发 创新 淘宝小程序 签约计划第三季

设计消息队列存储消息数据的 MySQL 表格

爱晒太阳的大白

走进Redis,让你重新认识redis。绝不是表面

派大星

签约计划第三季

Spark 在 Yarn 上运行 Spark 应用程序

xiaosi

spark YARN

模块八

Geek_2ce415

你了解SpringBoot启动时API相关信息是用什么数据结构存储的吗?

宁在春

Java 源码 springboot 7月月更

Snowflake vs. Redshift的2022战报:两个数据平台谁更适合你?

雨果

好的plm软件有哪些?plm软件排行榜

易成管理学

(WebFlux)001、如何自定义注解实现功能

编号94530

spring springmvc WebFlux 拦截器 @WebFilter

听说学Python字体反爬的人,都打开过这篇博客,自如字体反爬,图片字体反爬

梦想橡皮擦

Python 爬虫 7月月更

类似 MS Project 的项目管理工具有哪些

易成管理学

深入浅出边缘云 | 3. 资源配置

俞凡

架构 边缘计算 网络 深入浅出边缘云

数据质量提升

奔向架构师

数据质量 7月月更

openim支持十万超级大群

Geek_1ef48b

使用 Solidity 和 Node.js 构建简单的区块链预言机

devpoint

区块链 Node 预言机 7月月更

JAVA编程规范之服务器

源字节1号

软件开发 后端开发

SpringBoot日志收集-Aop方式-存进数据库

宁在春

aop springboot 7月月更

小心你的字典和样板代码

白日梦想家

总结 编码 反思 编程、 编码风格

设备树的引入与体验

贾献华

7月月更

API后端服务前端的模式介绍_架构_Jan Stenberg_InfoQ精选文章