01 BACKEND LANGUAGE SELECTION

给现有前端补后端:
默认选 Python 3 + FastAPI

在少编译、低复杂度、轻松写 API 的约束下,对主流后端语言做加权选型;附可运行 PoC(ecs_api)。

Accepted · v1.1 ADR 结构 2026-07-15 slug · backendlang
02 PROBLEM

前端已在,缺的是可联调的 JSON API


现状

  • 页面已存在
  • 没有后端接口
  • 需要尽快接通读写

要回答的问题

  • 用哪门语言起步最快?
  • 如何避免为性能选错栈?
  • 首版最小落地长什么样?

明确不做

  • 不做云侧 Rust 组合对比
  • 不做完整微服务拆分
  • 不做正式压测基准
03 GOALS

成功标准:改完就能验,容器也能跑


G1

少编译

改源码后数秒内可验证,长编译不作默认路径。

G2

轻松写 API

最少样板即可提供 REST/JSON 与字段校验。

G3

易联调

CORS + OpenAPI(/docs)降低前后端对齐成本。

G4

可部署

本地 uvicorn 与 Docker 一键对外提供健康检查。

04 DECISION DRIVERS

评估维度加权:快与省事优先


维度权重含义
编译 / 热更新×2改代码到可用的摩擦
写 REST/JSON×2脚手架与样板量
生态成熟度×1.5Web 库、工具链、社区
前端联调×1.5CORS、文档、协作成本
部署运维×1进程、依赖、容器友好度
性能天花板×0.5本场景权重低

方法说明

打分 1–5,加权总分满分 42.5。

这是技术选型 ADR 常见做法:先定标准,再打分,后决策。

性能不是本轮主战场——先接通,再度量。

05 SCORECARD

评分结果:Python 领先,Node 紧随


语言编译写 API生态联调运维性能总分
Python55545340.0
Node.js55454339.0
Go34435532.0
Java23533427.0
Rust12323519.0
Python
40.0
Node
39.0
Go
32.0
Java
27.0
Rust
19.0

Node 联调更高;Python 生态与运维轻松度略胜。前端主导可直接选 Node。

06 DECISION

采纳选项 A:Python 3 + FastAPI


首选

Python + FastAPI

默认业务后端

次选

Node.js

前端主导 / BFF

中期

Go

定型后单二进制

非首版

Rust / Java

编译与仪式更重

理由 1

无编译 + reload,对齐 G1

理由 2

校验与 OpenAPI 开箱,对齐 G2/G3

理由 3

ecs_api + Dockerfile,对齐 G4

07 TRADE-OFFS

主流语言都可用,首版不选重栈


降级理由

  • Go:仍有编译,不适合「今天就接通」
  • Rust:编译慢、学习曲线陡
  • Java:Spring 强,但样板与仪式更重

风险与缓解

  • Python 吞吐上限 → 先接通再度量
  • 依赖管理 → requirements + 容器统一
  • 团队更熟 JS → 允许次选 Node
08 SWITCH SIGNALS

何时再评估:看信号,不看传闻


→ 评估 Go

接口定型,需要单二进制、长期低运维。

→ 局部 Rust / 整体 Go

已有明确 CPU/延迟瓶颈,且业务形态稳定。

→ 评估 Java

组织规范强制 Spring 生态。

× 不要换

仅「听说某语言更快」——先把 FastAPI 跑通并度量。

09 PROOF OF CONCEPT

落地样例:ecs_api + Dockerfile


01

/health

健康检查,容器与编排探活。

02

/api/items

GET 列表 · POST 创建 · 内存存储。

03

/docs

OpenAPI UI,前端对照字段。

04

Docker

python:3.12-slim · 暴露 8000。

cd ecs_api uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 # 或 docker build -t ecs-api:local . && docker run --rm -p 8000:8000 ecs-api:local
10 TAKEAWAY

一句话带走:先轻松接通,再按信号加固


默认栈

Python 3 + FastAPI

次选 Node · 中期 Go · 非首版 Rust/Java

立刻可做

  • 跑通 ecs_api /docs
  • 前端接 /api/items
  • 需要时再谈换语言
文档 · 20260715/轻松后端语言选型.md 代码 · ecs_api/ 方法 · 加权评分 ADR