NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

    阅读完需:约 4 分钟

屏幕更小、有限的数据计划和需要更少请求的移动设备的 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:008071
用户头像

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

关注

评论

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

从源码角度看React-Hydrate原理

flyzz177

React

IoT 设备定位服务——设备管理类

阿里云AIoT

物联网 API 定位技术

轻量级的架构决策记录机制

京东科技开发者

团队管理 架构 软件架构 架构设计 架构决策

Go语言性能剖析利器--pprof实战

京东科技开发者

Go pprof 优化技巧 Go 语言 #go

如何用 30s 讲清楚什么是跳表

飞天小牛肉

redis 面试 社招 校招 秋招

鸿蒙开发实例 | 鸿蒙原子化服务卡片开发完美体验

TiAmo

华为 鸿蒙 12月月更

前端leetcde算法面试套路之双指针

js2030code

JavaScript LeetCode

当云原生成为一种显学,对象存储和数据湖如何顺势而为

云布道师

对象存储 云存储

假如面试官要你手写一个promise

helloworld1024fd

JavaScript

React源码分析(一)Fiber

flyzz177

React

React-Hooks源码深度解读

flyzz177

React

转转用户画像平台实践

转转技术团队

大数据 用户画像 用户画像分析

从recat源码角度看setState流程

flyzz177

React

前端常见内存泄漏及解决方法

达摩

Web 内存泄露

保护客户代码和应用安全,CodeArts有7招

华为云开发者联盟

云计算 后端 华为云 12 月 PK 榜 华为CodeArts

喜讯+1!袋鼠云数栈技术团队获“2022年度优秀开源技术团队”

袋鼠云数栈

开源

超大规模大数据集群管理平台的架构优化及实践

移动云大数据

“零容忍”监管,金融机构如何应对数据泄露风险?

极盾科技

数据安全

Kubernetes 跨集群流量调度实战

Flomesh

服务治理 Kubernetes 集群 流量管理

从react源码看hooks的原理

flyzz177

React

前端leetcde算法面试套路之二叉树

js2030code

2022 年度“用 TDengine,写 TDengine”征文!

爱倒腾的程序员

数据库 tdengine 时序数据库

看透react源码之感受react的进化

flyzz177

React

多线程永动任务设计与实现

小小怪下士

Java 多线程

Python中图像平滑方法的两种非线性滤波:中值滤波、双边滤波

华为云开发者联盟

Python 人工智能 华为云 12 月 PK 榜

演讲实录|姚延栋:终止“试点炼狱”,智能汽车时代数字化转型与实践

YMatrix 超融合数据库

车联网 海量数据 超融合数据库 智能网联 YMatrix

前端高频手写面试题集锦

helloworld1024fd

JavaScript

基于云原生的集群自愈系统 Flink Cluster Inspector

阿里云大数据AI技术

机器学习 flink 运维 云原生 12 月 PK 榜

预训练时代的自然语言处理 魔搭社区NLP模型全解析

阿里技术

自然语言处理 NLP 大模型

瓴羊Quick BI数据填报组件,实现智能化管理和高效挖掘利用

夏日星河

Flutter for Web 首次首屏优化——JS 分片优化

阿里巴巴终端技术

flutter 前端 Web 客户端

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