正式定档!QCon 北京站改期为2024年4月11-13日,地点:北京·国测国际会议会展中心 >>> 了解详情
写点什么

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

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

关注

评论

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

架构实战营模块1作业

竹林七贤

28次面试从未被拒,只因学了阿里P8大牛写的这份《Java技术成长笔记》

Java架构之路

Java 程序员 架构 面试 编程语言

Java多线程与并发系列从0到1全部合集!拿走不送~

钟奕礼

Java 编程 程序员 架构 面试

架构实战营-模块1-微信业务架构&学生管理系统方案

Lane

这份阿里21年最新版Java面试手册简直无敌了,已经助我拿下五个大厂offer!

Java架构之路

Java 程序员 架构 面试 编程语言

“区块链+版权”应用保护者

电微13828808271

《iOS应用逆向与安全》

Thrash

读后感

独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless

Serverless Devs

阿里云 运维 云原生 #Serverless

翻译:《实用的Python编程》07_05_Decorated_methods

codists

Python

什么是 NIO ?6000 字详解 NIO

hepingfly

Java nio IO流

不是吧?不会多态,你还说自己会Java

学Java关注我

Java 编程 架构 程序人生 技术宅

架构实战

颜培攀

架构实战营

架构实战营模块1学习总结

林子钧

学习 架构实战营 模块一

全网疯传!对标阿里P5-P9的知识体系学习路线及阿里内部Java核心知识手册。

Java架构之路

Java 程序员 架构 面试 编程语言

ElasticSearch架构及核心概念

五分钟学大数据

ES 4月日更

Android高级工程师进阶学习,架构师必备技能

欢喜学安卓

android 程序员 面试 移动开发

架构实战营模块1作业

林子钧

作业 架构实战营 模块一

Java面试题全部196题合集:涵盖大厂必考的9大技术点

钟奕礼

Java 编程 程序员 架构 面试

架构实战营模块1作业

阿体

4月17日,HarmonyOS开发者日将于上海启幕

Geek_283163

华为

2021 年推荐给 React 开发者的 Visual Studio Code 插件及配置

清秋

推荐 vscode 插件 React 4月日更

架构实战营模块一总结

竹林七贤

架构实战营 模块一:课后作业

Ahu

架构实战营

如何用 iMazing 备份和恢复辐射避难所

懒得勤快

手机 游戏 ios管理 imazing

2021最新中高阶Android面试题总结,成功入职阿里

欢喜学安卓

android 程序员 面试 移动开发

Substrate 合约书之合约综述

Patract

智能合约

2021最新拼多多Java面试题(现场五面),全面涵盖Java高级到高并发

钟奕礼

Java 编程 程序员 架构 面试

Java-GC概述

YouTube视频转MP3音频 (批量、高效、快捷)

科技猫

分享 教程 视频处理 youtube youtube转mp3

2021互联网大厂面经最新分享:百度/阿里/蚂蚁(附答案解析)

比伯

Java 架构 面试 程序人生 技术宅

肝了一个月,终于完成了24万字的Java面试手册!

码农之家

Java 编程 程序员 互联网 面试

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