原文作者:medium.com/@suragch
发布时间:2020年2月6日-8分钟阅读
服务器端Dart与Aqueduct介绍
如果你已经是一个后端开发者,你可以放弃阅读。你现在的技能对于你的Flutter应用来说就很好用了。
如果你对Flutter不感兴趣,你也可以不读了。你不妨学一个更流行的后端服务器框架,比如Node.js什么的。
如果你的无服务器Firebase设置对你来说很好,那么不要让我打击你的积极性。
介紹
好了,现在其他人都走了吗?只剩下你和我了,读者。前不久,我也和你一样。我知道Flutter,但我没有任何搭建后台服务器的经验。好吧,让我告诉你,你会喜欢上服务器端Dart的。能够在你的前端Flutter应用和后端服务器中使用相同的语言进行编码,使得学习曲线非常非常小。两者之间的跳跃几乎没有任何不同,在同一个项目中打开两个不同的文件。
我们将使用的语言是Dart来构建服务器,但如果你有兴趣了解我为什么选择Aqueduct框架,你可以在下面的链接中阅读我之前的文章。
原本我打算在Udemy上发布这个付费课程。我在制作所有视频的过程中花了一部分时间,但时间太长了,我需要继续做其他项目。这些视频只是坐在那里无所事事,所以我决定把它们上传到YouTube。我会把它们穿插在这些书面课程中,以补充我写的内容。你可以自由地完全跳过这些书面教程,但这里的好处是,当你走的时候,复制和粘贴代码片段会更容易。同时,我也会更容易更新书面内容中的任何错误。 如果你喜欢听读,这里是第一个视频。
内容预览
在这一系列的文章中,我将指导你如何设置一个安全的服务器作为你的Flutter应用的后端。如果我告诉你做任何不安全的事情,那么请留言警告其他人并教育我)。
我将把课程分成七个部分。
- 入门(你在这里)。在这篇文章中,你将设置你的开发环境。这将包括安装Dart和Aqueduct,你将在一秒钟内完成。
- HTTP请求。学习如何制作和处理HTTP网络请求,如GET,POST,PUT和DELETE。
- 数据库:Aqueduct使用的是数据库。Aqueduct使用的数据库是PostgreSQL。如果这对你来说是新的,不要担心。如果你熟悉一般的数据库,就不会有太多的学习曲线。
- 测试:接下来是单元测试。接下来是单元测试 作为一个开发者,我越是成长,就越是学会热爱单元测试。在后台测试的最大好处是没有UI需要处理。
- 认证。学习如何用OAuth2来验证用户身份 这样只有授权用户才能访问服务器的某些部分
- 生产服务器。看看如何将你在本地机器上做的一切转移到真正的服务器上。
- Flutter客户端应用。制作一个简单的Flutter应用,使用服务器的REST API与之通信。
通过所有这些课程,我们将制作一个字典应用程序。部分(好吧,大部分)是因为这是我真正想做的事情,有些时间。但它也提供了一个很好的例子,你会在自己的服务器应用中想要的许多功能。你可以根据自己的要求改变细节就可以了。我最近甚至一直在看自己的视频来重新学习这些概念,因为我正在为另一个项目做一个后端)。
现在你要安装Dart并设置好IDE。如果有什么不清楚的地方,你可以在这里观看如何做到这一点。
安装Dart
安装Dart SDK,请到Dart官方网站。在那里你会发现在Mac、Linux和Windows上安装的具体说明。
你可能会认为你可以只使用Flutter包含的Dart版本。这可能是真的,但我听说有轻微的差异,所以我建议你只安装独立的Dart SDK。反正你以后要在服务器上运行的就是这个。
通过在终端运行以下命令来检查你是否已经安装了Dart。
dart --version
在写这篇文章的时候,我的Dart版本是2.7.1。
如果你的系统没有识别Dart命令,检查它是否在你的PATH中。例如,在Mac和Linux系统中,你可以在命令行中这样做。
echo $PATH
如果dart不在路径中,那么你需要添加它。
IDE设置
在这个系列中,我一直在使用IntelliJ Idea,但VS Code也能正常工作。如果你是 Android Studio 的用户,你会觉得 IntelliJ 很合适,因为 Android Studio 就是基于 IntelliJ 的。
从这里的官方网站安装IntelliJ。下载免费的Community版本就可以进行Dart开发了。
安装Dart插件
打开IntelliJ,在启动窗口中选择配置>插件>市场,搜索Dart。然后安装该插件。如果你已经打开了一个IntelliJ项目,你可以去偏好设置>插件来做同样的事情。如果你使用的是VS Code,点击侧边栏的Extensions按钮,搜索Dart)。
我们不打算在IntelliJ中创建一个新的项目。我们将在一分钟内使用Aqueduct来完成这个任务。
安装Aqueduct
现在Dart已经安装好了,我们将安装Aqueduct,这是一个用Dart编写的框架,可以大大简化制作后台服务器的过程。
去官方的Getting Started with Aqueduct页面获取指导和文档。你会想把这个网站收藏起来,因为当你遇到困难的时候,这里有很多好的文档可以帮助你。
要安装Aqueduct,请在终端输入以下命令。
pub global activate aqueduct
你可能会收到一条信息,告诉你将Aqueduct添加到你的路径中。一旦你这样做并重启你的终端,你应该可以在命令行上运行Aqueduct命令。
输入以下内容。
aqueduct --version
在写这篇文章的时候,我使用的是Aqueduct 3.2.1版本。同样的,如果你的shell不能识别aqueduct,你需要把它添加到路径中,然后重新启动你的终端。
创建一个新项目
在终端中,cd到任何你想创建项目的位置。
在本文最初的版本中,我建议像下面的大纲一样构建服务器端和客户端的文件,并使用一个GitHub repo。你仍然可以使用这种文件结构,但现在我建议你为客户端和服务器使用两个不同的repo。当你部署服务器时,如果服务器有自己的仓库,那么使用git clone会更容易。
my_project
my_project_server
(Aqueduct files here)
my_project_client
(Flutter files here)
在这个系列中,我将把Aqueduct项目称为dart_server。像这样创建它。
aqueduct create dart_server
在IntelliJ(或VS Code)中,打开dart_server文件夹。如果你得到一条关于为你的项目启用Dart的消息,请这样做。
REST APIs和HTTP方法
您刚刚创建的服务器是一个HTTP服务器。您将使用它来制作一个REST API来与您的Flutter应用程序进行来回通信。如果你对这些术语不熟悉,请阅读我写的以下文章,作为本系列的补充。
运行服务器
此时你已经创建了一个Aqueduct服务器。在完成这个单元之前,你要对服务器进行一次测试。
在你的IDE中,打开dart_server项目根部的pubspec.yaml文件。文件结构与Flutter如此相似,这已经让人感觉很熟悉了,不是吗?
良好的pubspec.yaml。
将描述改为以下内容。
description: Aqueduct dictionary application
并将作者改成自己的名字和邮箱。
author: Suragch <me@example.com>
在终端中,通过在项目的根目录下运行以下命令来启动Aqueduct服务器。
aqueduct serve
您应该在终端上看到以下输出。
-- Aqueduct CLI Version: 3.2.1
-- Aqueduct project version: 3.2.1
-- Preparing...
-- Starting application 'dart_server/dart_server'
Channel: DartServerChannel
Config: /Users/.../dart_server/config.yaml
Port: 8888
[INFO] aqueduct: Server aqueduct/1 started.
[INFO] aqueduct: Server aqueduct/2 started.
您的服务器现在正在运行
注意:
- 端口是
8888。这是Aqueduct的默认端口。 aqueduct/1和aqueduct/2是两个不同的服务器实例。它们运行在两个不同的Dart隔离器上,所以它们不会相互交谈。同时运行两个实例可以让你处理更多的同时连接,更好地利用多核CPU硬件。
你可以通过按Ctrl+C来停止服务器,但先不要这样做。你将通过发出一个GET请求来测试服务器。
测试服务器
打开任何浏览器,在地址栏中输入以下地址。
http://localhost:8888/
你用localhost是因为服务器是在自己的机器上运行的,正如我上面提到的,8888是Aqueduct用来通讯的端口。
输入这个地址后,你会得到一个404 Not Found的错误。
其实这是好事,因为这意味着服务器在工作。Aqueduct就是产生这个错误信息的。它的意思就是你没有为localhost:8888/定义任何路由。
在你的IDE中,打开lib/channel.dart。
lib/channel.dart
在文件的底部,你应该找到一个router对象。
router
.route("/example")
.linkFunction((request) async {
return Response.ok({"key": "value"});
});
啊,你可以看到定义的路由是/example。让我们在浏览器中试试。
http://localhost:8888/example
成功了! 服务器为路由/example返回了一个JSON键值对。当浏览器访问一个地址时,他们在幕后提出了一个GET请求。在下一节中,你不仅会提出和处理更多的GET请求,还会提出POST、PUT和DELETE请求。
在我完成那篇文章之后,我会在这里添加一个链接。在这之前,请放心继续观看系列视频,或者关注Aqueduct的文档。
通过( www.DeepL.com/Translator )(免费版)翻译