很多人在接入 API 或排查连通问题时卡住,不是因为技术难,而是没搞清自己这段代码到底站在哪一边:报错说「服务端超时」,可你的代码明明跑在浏览器里;文档写「客户端需带 Key」,你却把它塞进了后端。这篇不背术语定义,只给一套判断标准:看代码跑在谁的机器上、请求从哪发起、谁持有密钥。顺着这套标准,你能一眼分清四个词的边界,也能知道什么情况下这种划分并不适用。
接 API 或者排查连不上问题时,最常见的卡点不是技术难,而是没搞清自己这段代码站在链路哪一边。报错说服务端超时,可你代码明明跑在浏览器里;文档写客户端要带 Key,你却把它塞进了后端。位置一站错,后面所有判断都跟着错。
这篇不背术语定义,只给一套判断标准:看代码跑在谁的机器上、请求从哪发起、谁持有密钥。顺着这套标准,四个词的边界会很清楚;同时也会说明什么情况下这种划分根本不适用,硬套只会绕远。
四个词其实站在两条轴上,别混着比
前端与后端讲的是职责分工,服务端与客户端讲的是运行位置。两套词经常交叉使用,所以看着乱。判断一个词指什么,先问它是描述代码干什么,还是描述代码跑在哪。同一段程序可以既是客户端又是后端,比如一个服务去调用另一个服务时,发起方在当前链路里就是客户端角色。
| 词 | 偏重的轴 | 典型运行位置 |
|---|---|---|
| 前端 | 职责分工 | 用户设备或服务端渲染进程 |
| 后端 | 职责分工 | 机房里的服务进程 |
| 客户端 | 运行位置 | 用户设备或主动发起调用的一方 |
| 服务端 | 运行位置 | 被调用、对外提供能力的一方 |
- 第一条轴:谁跑在用户设备上、谁跑在远端机器上,前端与客户端偏前者,后端与服务端偏后者。
- 第二条轴:前端后端讲分工,服务端客户端讲位置,两套词交叉使用才显得乱。
- 同一段程序可能同时占两个身份,一个服务调用另一个服务时,它既是后端也是客户端。
- 判断词义先看语境:文档里说客户端,多半指调用方;说前端,多半指用户能看到的界面层。
落到具体项目:用三个问题定位自己在哪一侧
抽象区分没意义,落到你手上的代码才有用。拿不准的时候,依次回答下面三个问题,答案落在哪边,你就在哪一边。这三个答案建议直接写进接口文档或排错记录,跨团队沟通能省掉大半扯皮。
- 问题一:运行环境这段代码跑在浏览器、手机、桌面应用,还是服务器进程里。跑在用户设备上的,位置属性就是客户端侧。
- 问题二:密钥能不能放数据库连接串、调用密钥能不能放在这个环境里。放不了,说明它在用户侧,属于客户端职责范围。
- 问题三:谁先发起当前链路里是哪个环节先发出的请求,先发起的一方就是客户端角色,哪怕它本身是个服务。
最容易站错位置的几类场景
这几类场景站错的概率最高,而且后果不轻,尤其是密钥被写进用户设备那一侧时。先看清自己属于哪一类,再决定代码怎么写、日志怎么看。
| 场景 | 实际位置 | 容易犯的错 |
|---|---|---|
| 浏览器直连模型接口 | 客户端 | 把密钥写进前端代码,等于公开 |
| 本地脚本调远端接口 | 脚本是客户端,被调方是服务端 | 两边日志混在一起看,定位不到源头 |
| 服务端渲染页面 | 渲染逻辑在服务端,产出物是前端内容 | 把渲染职责当成纯前端,缓存策略照抄浏览器 |
| 纯静态页面或离线单机工具 | 没有清晰的两侧划分 | 硬套划分,反而把简单问题复杂化 |
最后一行要单独记住:什么情况下这套划分不适用。没有远端调用、没有用户与服务之间的边界时,前后端、服务端客户端这些词都没有落脚点,强行归类只会让自己绕进去。判断标准失效的地方,就别硬用。
一张对照清单,配接口和排错时直接用
下面这份清单不用背,配接口、接报错、写联调记录时照着走一遍就行。顺序别打乱,先定角色,再定位置,最后才谈日志和指标。
- 先写角色:发起方是客户端,被调用方是服务端,尽量不用前后端描述一条链路。
- 再写位置:代码在用户设备还是机房,决定密钥、缓存和日志各自该放哪。
- 报错先定位是哪一侧报的,超时和鉴权失败绝大多数发生在两侧之间的边界上。
- 联调前先量一次网络与接口的延迟基线,别把网络抖动误判成代码逻辑问题。
- 把上面几行写成固定模板存进团队文档,新人接手时直接套。
延迟基线具体是多少、不同线路差多少,不要凭印象,到站内工具先跑一次当时的数字。位置判断对了,再看数字才有意义;位置判断错了,数字再准也是白看。站内相关的判断标准和工具入口,都在导航里能直接找到。
下一步想知道同一份接口在不同线路上的实际表现差多少,先跑一次连通性测试,把基线数字拿到手,再回头检查自己的位置判断对不对。→常见问题
前端和后端,跟客户端和服务端是一回事吗?
不是同一套划分。前端后端讲的是职责分工,谁负责界面与交互、谁负责数据与逻辑;客户端服务端讲的是运行位置,代码跑在用户设备上还是远端机器上。一个桌面应用的前端代码也是客户端代码,两者会重叠但不相等,混用时容易在排错时找错方向。
为什么浏览器直接调接口会被说成不安全?
因为浏览器里的代码和密钥对用户完全可见,任何人都能翻出来复用。凡是需要保密的东西,都要放到用户碰不到的那一侧去发起请求。判断标准很简单:这段代码所在的环境,用户能不能直接看到源码和配置,能就属于用户侧。
我该按哪个词去跟同事描述问题?
描述链路用客户端和服务端,描述职责用前端和后端,两者不要混在一句话里。比如「客户端请求服务端超时」比「前端调后端超时」更容易定位,因为前者直接指出了超时发生在哪两台机器之间,而不是在说代码归属。