最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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:008067
用户头像

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

关注

评论

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

ARTS 打卡 (20.09.07-20.09.13)

小王同学

ARTS打卡 第16周

引花眠

微服务 ARTS 打卡计划

将DevOps视为哲学——实施DevOps的绝佳方式

禅道项目管理

DevOps 测试 开发 持续交付

程序的机器级表示-异构的数据结构

引花眠

计算机基础

极客大学-架构师训练营

9527

图计算黑科技:打开中文词嵌入训练实践新模式

腾讯云大数据

大数据

ARTS打卡Week 12

teoking

Spring 5 中文解析测试篇-Spring MVC测试框架

青年IT男

单元测试 Spring5

你必须要了解的「架构」小历史

小齐本齐

spring Spring Cloud Spring Boot

智能商业时代的思考(二)网络协同抓住用户

刘旭东

微信 商业价值 数据智能 网络协同 商业智能

前端 10 问之 Docker (第一篇)

局外人

Docker

鹰眼 | 分布式日志系统上云的架构和实践

腾讯云大数据

大数据

从linux源码看epoll

无毁的湖光

Linux TCP Linux Kenel

Mysql学习笔记:InnoDB事务和ACID模型

马迪奥

MySQL innodb

链表中移除重复节点,保罗·格雷厄姆的传奇博客,Mac三指拖动操作,大数据平台 John 易筋 ARTS 打卡 Week 17

John(易筋)

大数据 ARTS 打卡计划 链表移除相同节点 保罗格雷厄姆 mac三指操作设置

oeasy教您玩转 linux 010213 中文 fcitx

o

Elasticsearch索引容量管理实践

腾讯云大数据

大数据

看动画学算法之:排序-快速排序

程序那些事

排序 快速排序 数据结构和算法 看动画学算法

同城双活与异地多活架构分析

vivo互联网技术

架构 高可用 架构设计 高可用系统的架构

Docker映射详解,没问题了!

程序员的时光

Docker

简述C语言宏定义的使用

C语言与CPP编程

c c++ 编程语言

为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)

冰河

git 冰河 代码管理 代码仓库 分支合并

哦!这该死的 C 语言

cxuan

c 后端

CountDownLatch 瞬间炸裂!同基于 AQS,凭什么 CyclicBarrier 可以这么秀?

程序员小航

Java 源码 AQS 源码阅读 CyclicBarrier

数据结构与算法系列之数组

书旅

数据结构 算法 数组 数据结构与算法

基于electron桌面级脚手架的设计

久违

设计 大前端 全栈

PB级大规模Elasticsearch集群运维与调优实践

腾讯云大数据

大数据

ASP.NET Core 性能优化最佳实践

newbe36524

微服务 性能优化 .net core ASP.NET Core

java中实现List集合中对象元素按其属性的中文拼音排序

云辰

创建spring boot starter

曾彪彪

Java spring Boot Starter

想学习数据结构和算法,推荐给你 10 本优质书单

沉默王二

数据结构 算法 书单推荐

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