2026 年 Dart Server-Side:Dart Frog 入门 🐸

发布: (2026年1月7日 GMT+8 01:05)
4 min read
原文: Dev.to

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 前端的连接
  • 身份验证与部署
  • 扩展与高级特性

Full source code here

Back to Blog

相关文章

阅读更多 »