2026 年 Dart Server-Side:Dart Frog 入门 🐸
Source: Dev.to
Introduction
我今年(2026)的计划之一是进一步探索服务器端的 Dart,因为 Flutter 继续主导跨平台开发,已为超过 40 % 的新移动和网页应用提供动力。真正的游戏规则改变者是能够使用 全栈 Dart 完全构建前端和后端——使用同一种语言编写客户端和服务器端代码。
在本指南(以及配套视频)中,我们将一起了解 Dart Frog,这款正在赢得 Flutter 开发者青睐的极简后端框架。我们将从零构建一个简单的 REST API,并讨论它在真实的 Flutter 项目中为何常常优于 Node.js/Express。
Why Server‑Side Dart Matters in 2026
Flutter 生态系统已经成熟了很多。开发者不再想在客户端使用 Dart、在服务器端使用 JavaScript/TypeScript 之间切换。全栈 Dart 带来:
- 共享模型、枚举和校验逻辑
- 整个栈的空安全(null‑safety)
- 更快的开发速度和更少的 bug
流行的选择包括 Shelf(底层)、Serverpod(完整套件)以及 Dart Frog——大多数 REST API 和微服务的最佳平衡点。
What Is Dart Frog?
Dart Frog 是一个受 Express.js 启发、但完全用 Dart 编写的极简路由式后端框架。由 Very Good Ventures 创建,随后发展为社区驱动的活跃项目。
关键特性
- 服务器代码热重载
- 强大的 CLI 用于项目脚手架
- AOT 编译 → 原生生产二进制文件
- 内置中间件支持
- 简易部署(Dart Globe、Vercel 等)
Dart Frog vs Node.js: Performance & Ecosystem
两个框架都擅长 I/O 密集型 API,但在以 Flutter 为中心的项目中 Dart Frog 往往更胜一筹:
- AOT 编译 → 更低的延迟和启动时间
- Dart isolates → 真正的并发(相较于 Node 的事件循环)
- 更快的 JSON 处理和更少的运行时开销
最近的社区测试证实,Dart 在 CPU 密集型任务和原生部署方面具有优势。虽然在某些情况下 Node 仍能在原始吞吐量上领先,但共享代码库的优势使 Dart Frog 成为 Flutter 开发者更聪明的选择。
Building Your First Dart Frog API
Install the CLI
dart pub global activate dart_frog_cli
Create and run the project
dart_frog create my_backend
cd my_backend
dart_frog dev
Default route (routes/index.dart)
import 'package:dart_frog/dart_frog.dart';
Response onRequest(RequestContext context) {
return Response.json(
body: {'message': 'Hello Flutter World from Dart Frog! 🐸'},
);
}
Users endpoint (routes/users/index.dart)
import 'package:dart_frog/dart_frog.dart';
final _users = [
{'id': 1, 'name': 'Alice'},
{'id': 2, 'name': 'Bob'},
{'id': 3, 'name': 'Charlie'},
];
Future onRequest(RequestContext context) async {
// GET → fetch users
if (context.request.method == HttpMethod.get) {
return Response.json(body: _users);
}
// POST → add a new user
if (context.request.method == HttpMethod.post) {
final body = await context.request.json() as Map;
final newUser = {
'id': _users.length + 1,
'name': body['name'],
};
_users.add(newUser);
return Response.json(body: newUser, statusCode: 201);
}
return Response(statusCode: 405);
}
Test with curl
curl http://localhost:8080/users
curl -X POST http://localhost:8080/users \
-H "Content-Type: application/json" \
-d '{"name": "Samuel"}'
Build for production
dart_frog build
What’s Next?
这仅仅是个开始。系列后续内容包括:
- 真正的数据库集成
- 与 Flutter 前端的连接
- 身份验证与部署
- 扩展与高级特性