发布于 2026-01-06 4 阅读
0

使用 Dart、Aqueduct 和 PostgreSQL 构建 RESTful Web API — 第一部分 2018 年 8 月 12 日

使用 Dart、Aqueduct 和 PostgreSQL 构建 RESTful Web API — 第一部分

2018年8月12日

使用 Dart、Aqueduct 和 PostgreSQL 构建 RESTful Web API 的特色图片


请注意:从 Dart 2 开始,Aqueduct 的 API 已发生变更,导致一些不兼容的问题。本文基于 Dart v1 的 Aqueduct 2.5.0 版本编写。

我已经将其更新为一个新的视频系列:http://bit.ly/aqueduct-tutorial


在这个全新的 RESTful API 教程系列(#yetanotherrat)中,我们将探索 Dart 平台及其在构建服务器端应用程序方面的功能。

我上一篇探索 Dart 语言的文章之后,我一直在研究如何使用 Dart 构建 RESTful 服务。经过一番深入研究,我偶然发现了 Stable Kernel 开发的 Aqueduct 项目。它已经发布了 2.0 版本,这让我印象深刻。而且,它的文档非常全面,示例也浅显易懂,这让我决定进一步探索。

在经历了如此富有成效且令人耳目一新的文档学习和实践经验之后,我很高兴能带您和我一起踏上这段旅程,从头到尾构建一个可用的 API!

想看视频?请在 YouTube 上观看。


那么,什么是渡槽?

它是一款用于在服务器端创建和部署 RESTful Web API 的开源框架。它与ExpressHapi,甚至 .NET Web API都有着相似之处,提供了一个入口点和一系列全面的功能。

我最喜欢的是:

  1. 流畅、可链式路由一种函数式风格,用于组合路由及其处理方法。
  2. 一个命令行工具。它允许你通过发出命令来搭建下一个项目。
  3. 开箱即用的多线程功能。通过 Dart 的“隔离区”机制启动应用程序的多个实例,从而在服务器上的所有 CPU 核心上进行扩展。
  4. 内置ORM框架。如果您使用关系型数据库,这绝对是必备工具!同时还支持数据库迁移。
  5. 内置测试库。因为你需要测试所有东西!与 Travis CI 等工具兼容性良好。

在本系列教程中,我们将构建一个用于个人阅读列表(暂且称之为FaveReads 📚)的 API,内容涵盖以下主题:

我们开始吧?

设置并运行示例

如果你还没有安装 Dart SDK ,我建议你安装一下。它提供了 Windows、Mac 和 Linux 的安装说明。

您可以通过检查终端来确认 Dart 是否正在运行:

dart --version
Enter fullscreen mode Exit fullscreen mode

Dart 自带一个名为pub 的工具来管理软件包。让我们使用这个工具来安装 Aqueduct:

pub global activate aqueduct
Enter fullscreen mode Exit fullscreen mode

这样我们就可以访问aqueduct可执行文件了。切换到工作目录,让我们创建项目:

aqueduct create fave_reads && cd fave_reads
Enter fullscreen mode Exit fullscreen mode

现在你应该位于fave_reads包含所有项目文件的目录中。接下来,我们将重点关注:

bin/
  main.dart
lib/
  fave_reads_sink.dart
pubspec.yaml
Enter fullscreen mode Exit fullscreen mode
  • bin/main.dart 创建我们的服务器并启动应用程序
  • lib/fave_reads_sink.dart 文件 使用其配置来设置您的应用程序。
  • pubspec.yaml 文件 包含项目的元数据,类似于 Node.js 开发中的 package.json 文件。

让我们使用以下任一命令启动应用程序:

aqueduct serve # or `dart bin/main.dart`
Enter fullscreen mode Exit fullscreen mode

好了,我们开始吧:

渡槽服务于终端

现在我们有一个服务器正在运行,http://localhost:8081/example是唯一创建的路由。访问http://localhost:8081/example该路由将返回以下响应:

{ "key": "value" }
Enter fullscreen mode Exit fullscreen mode

在此值得一提的是,Aqueduct 具有 RequestSink 的概念,根据文档,它的作用是:

负责应用程序的初始化,包括设置路由、授权和数据库连接。

应用程序需要一个RequestSink子类才能接收请求。我们的示例继承了FaveReadsSinkRequestSink类,以便我们能够用自己的实现重写其方法。这些方法setupRouter分别是willOpen`routes` 和 `requests`。第一个方法允许我们定义路由及其关联的控制器和其他中间件,而第二个方法允许我们在路由设置完成后、应用程序接收请求之前执行任何异步初始化操作。

当前请求的默认响应类型设置为 JSON。不过,我们可以根据需要将其设置为任何合适的响应类型。

让我们通过在 setupRouter 方法中创建第二个路由来演示这一点:

router.route('/').listen((request) async {
  return new Response.ok('Hello world')
    ..contentType = ContentType.TEXT;
});
Enter fullscreen mode Exit fullscreen mode

利用方法级联,我们可以将contentType属性设置为text/plain。该ContentType实用工具内置于 Dart 中,可通过以下样式使用:

new ContentType(primaryType, subType, {String charset, Map parameters});
Enter fullscreen mode Exit fullscreen mode

它已经包含了 HTML、JSON 和 TEXT 的常量,所以在大多数情况下,你应该直接使用这些常量。

现在,通过终止当前进程并重新运行来重启服务器aqueduct serve。访问根路径时,您应该会看到以下内容:

Aqueduct 服务器本地主机

在结束之前,让我们将应用程序实例扩展到我们拥有的核心数。在bin/main.dart中,当调用 app.start 时,当前核心数设置为 2:

await app.start(numberOfInstances: 2);
Enter fullscreen mode Exit fullscreen mode

为了解决这个问题,我们将从“dart:io”库导入 Dart 的Platform类,并按如下方式修改main.dart :

import 'dart:io' show Platform;

Future main() async {
  ...
  ...
  await app.start(numberOfInstances: Platform.numberOfProcessors);
  ...
}
Enter fullscreen mode Exit fullscreen mode

一些关于 VS Code 的开发技巧👈

首先,请确保通过 Dart Code 安装Dart扩展,以启用 Dart 和 Flutter 支持。

其次,添加一个 Dart 启动配置,并设置以下参数:

{
  "name": "Dart",
  "type": "dart",
  "request": "launch",
  "program": "${workspaceFolder}/bin/main.dart"
}
Enter fullscreen mode Exit fullscreen mode

这样您就可以通过 VS Code 运行应用程序,并能够添加断点以帮助调试。

使用 Dart 进行 VS Code 调试


在结束之前,我想问大家一个问题……你们希望从这个系列文章中获得什么?请在下方留言告诉我,谢谢。

本系列第一部分到此结束。本系列的代码已上传至 GitHub,并将随着系列的推进而更新。敬请期待更多内容。

延伸阅读

  1. 渡槽文件
  2. Pub入门
  3. Joe Conway 在 2016 年 Dart 开发者峰会上的演讲


原文发表于Medium

文章来源:https://dev.to/creativ_bracket/building-restful-web-apis-with-dart-aqueduct-and-postgresql-55k