首页 iOS.& Swift Books 服务器端迅速与蒸气

2
你好,蒸气! 由Tim Condon撰写

使用新技术开始项目可能是令人生畏的。蒸气使得易于开始。它提供了一个方便的命令行工具,为您创建Starter项目。

在本章中,您将首先安装vapor工具箱,然后使用它来构建并运行您的第一个项目。您将通过了解路由,接受数据和返回JSON来完成。

蒸气工具箱

蒸气工具箱是在开发vapor应用程序时使用的命令行界面(CLI)工具。它有助于您从模板创建一个新的vapor项目,可以根据需要添加依赖项。

在安装工具箱之前,您需要确保您的系统安装了SWIFT。在MacOS上,只需从Mac App Store安装Xcode。在Linux上,下载它 //www.swift.org 如下所述安装。

蒸气4需要Xcode和命令行中的SWIFT 5.2。 Xcode 11.4和11.5都提供Swift 5.2。

安装在麦斯科斯上

蒸气使用Homebrew安装工具箱。

如果您没有安装Homebrew,请访问 //brew.sh 并运行安装命令。

终端,运行以下命令:

brew install vapor

笔记: 蒸气现在是自制核心的一部分。如果您使用Vapor的Homebrew Tap安装了旧版本的工具箱,则可以使用以下更新到最新版本:

brew uninstall vapor && brew untap vapor/tap && brew install vapor

这从Homebrew的水龙头列表中删除了蒸气,并从Homebrew Core安装最新版本的工具箱。

在Linux上安装

本书主要关注使用Xcode和MacOS开发您的应用程序。但是,您使用vapor构建的所有内容都将适用于Swift支持的Linux版本。 vapor工具箱以完全相同的方式工作,除了在Linux上不能使用Xcode的异常。

安装迅速

要在Linux上安装Swift,请转至 //swift.org/download/ 并下载操作系统的工具链。按照安装安装在计算机上安装工具箱。完成后,在shell提示符下输入以下内容:

swift --version

您应该返回正确版本的Swift:

安装蒸气

在控制台中,运行以下命令:

# 1
git clone //github.com/vapor/toolbox.git
# 2
cd toolbox
# 3
git checkout 18.0.0
# 4
swift build -c release --disable-sandbox
# 5
mv .build/release/vapor /usr/local/bin

这是它的所作所为:

  1. 克隆GitHub的工具箱。
  2. 导航到您克隆的工具箱目录。
  3. 签出版本18.0.0。您可以在GitHub上找到“版本”页面上的最新版本 //github.com/vapor/toolbox/releases.
  4. Build the toolbox in release mode. --disable-sandbox allows the toolbox to execute other processes.
  5. 将工具箱移动到本地路径中,以便您可以从任何地方调用它。

这本书在引用Linux时使用Ubuntu 20.04,但其他支持的Linux版本应该以完全相同的方式工作。

建立您的第一个应用程序

设置蒸气项目首先可以复杂,因为有许多所需的文件和目录。为帮助解决此问题,工具箱可以从模板创建一个新项目。工具箱可以为简单API,网站和身份验证生成模板。您甚至可以创建自己的模板。

首先,在主目录中创建一个新目录或在您的蒸气项目上工作的某处。例如,在终端中输入以下命令:

mkdir ~/vapor
cd ~/vapor

这在名为您的主文件夹中创建了一个新目录 并在那里航行。接下来,创建项目:

汽 new HelloVapor

然后工具箱询问您是否想使用Fluent和其他软件包。现在,键入 n 其次是 进入 所有人都是。您将在以后了解流利和其他包。然后工具箱为您生成项目。

您应该看到以下内容:

要构建和启动您的应用程序,请运行:

# 1
cd HelloVapor
# 2
swift run

这是它的所作所为:

  1. cd 是“更改目录”命令并将您带入项目目录。
  2. 这构建并运行应用程序。它可能需要一些时间,因为它必须取自所有依赖项。

该模板具有预定义的路由,因此打开浏览器并访问 http:// localhost:8080 / hello 看回复!

SWIFT包管理器

蒸气工具箱使用SWIFT包管理器,或SwiftPM - 一个类似于IOS上的CocoApods的依赖管理系统 - 配置和构建vapor应用程序。打开项目目录并查看结构。在麦斯斯in. 终端, 进入:

open .

请注意,即使您构建并运行应用程序,您的模板中没有Xcode项目。这是刻意的。实际上,使用该项目文件明确排除从源控制中 .gitignore. 文件。使用SWIFTPM时,Xcode在一个调用的隐藏目录中创建一个工作空间 .swiftpm..

SWIFTPM项目是定义的 包装 清单文件。它声明了目标,依赖关系以及它们如何链接在一起。项目布局也与传统的Xcode项目不同。有一个 测试 测试目录。有一个 来源 源文件的目录。清单中定义的每个模块都有自己的目录 来源. Your sample app has an 应用程序 module and a 跑步 module, so 来源 包含一个 应用程序 目录和A. 跑步 directory.

在 - 的里面 跑步 目录,有一个文件: 主要。这是所有SWIFT应用程序所需的入口点。

笔记: On iOS, this is usually synthesized with a @UIApplicationMain attribute on the 应用程序Delegate.

该模板包含设置应用程序所需的一切,而且您不应该更改 主要 or the 跑步 module. Your code lives in 应用程序 or any other modules you define.

创建自己的路线

笔记:本节,大多数本书,使用Xcode。如果您正在开发Linux,请使用您喜欢的编辑器,然后使用 迅速运行 构建和运行您的应用程序。

现在你已经制作了你的第一个应用程序,现在是时候看看使用蒸气添加新的路线是多么容易。如果vapor应用程序仍在运行,请通过按下停止 Control-C. 在终端。下一个输入:

open Package.swift

这将在Xcode中打开项目作为SWIFTPM工作区。 Xcode需要几分钟的时间来下载依赖关系。完成后,打开 路线.swift.来源/应用程序。你会看到你上面访问过的路线。

To create another route, add the following after the app.get("hello") closure:

app.get("hello", "汽") { req -> String in
  return "Hello Vapor!"
}

这是它的所作所为:

  • Add a new route to handle a GET request. Each parameter to app.get is a path component in the URL. This route is invoked when a user enters http:// localhost:8080 / hello / vapor as the URL.
  • Supply a closure to run when this route is invoked. The closure receives a Request object; you’ll learn more about these later.
  • 返回一个字符串作为此路由的结果。

在Xcode工具栏中,选择 Hellovapor. 计划和选择 我的Mac. as the device.

建立和运行。在您的浏览器中,访问 http:// localhost:8080 / hello / vapor.

如果你想向访问你的应用程序的人打招呼怎么办?在世界上添加每个名称将是非常不切实际的!一定会有更好的办法。有的,蒸汽使其变得容易。

添加一个新的路由,向Whomever访问您好。例如,如果您的姓名是蒂姆,您将使用URL访问该应用程序 http:// localhost:8080 / hello / tim 它说“你好,蒂姆!”。

在您输入的代码后添加以下内容:

// 1
app.get("hello", ":name") { req -> String in
  // 2
  guard let name = req.parameters.get("姓名") else {
    throw Abort(.internalServerError)
  }
  // 3
  return "Hello, \(name)!"
}

这是游戏:

  1. Use :name to designate a dynamic parameter.
  2. Extract the user’s name, which is passed in the Request object. If Vapor can’t find a parameter called 姓名, throw an error.
  3. 使用名称返回问候语。

建立和运行。在您的浏览器中,访问 http:// localhost:8080 / hello / tim。尝试更换 蒂姆 有一些其他值。

接受数据

大多数Web应用程序必须接受数据。一个常见的例子是用户登录。为此,客户端将POST请求与JSON BODE发送,该应用程序必须解码和处理。要了解有关POST请求以及它们的工作方式,请参阅第3章“HTTP基础知识”。

Vapor makes decoding data easy thanks to its strong integration with Swift’s Codable protocol. You give Vapor a Codable struct that matches your expected data, and Vapor does the rest. Create a POST request to see how this works.

本书使用Rested应用程序,可从Mac App Store免费下载。如果您愿意,您可以使用其他REST客户端来测试您的API。

设置如下请请求:

  • URL.: http:// localhost:8080 /信息
  • 方法: 邮政
  • 添加一个调用的单个参数 姓名。使用您的名称作为值。
  • 选择 json编码 as the request type. This ensures that the data is sent as JSON and that the Content-Type header is set to application/json. If you’re using a different client, you may need to set this manually.

您的请求应该类似于以下内容:

回到Xcode,打开 路线.swift. and add the following to the end of the file to create a struct called 在foData to represent this request:

struct InfoData: Content {
 let name: String
}

This struct conforms to Content which is Vapor’s wrapper around Codable. Vapor uses Content to extract the request data, whether it’s the default JSON-encoded or form URL-encoded. 在foData contains the single parameter 姓名.

Next, add a new route after the app.get("hello", "汽") closure:

// 1
app.post("在 fo") { req -> String in
  let data = try req.content.decode(InfoData.self)
  return "Hello \(data.name)!"
}

这是它的所作所为:

  1. 添加新的路由处理程序来处理URL的POST请求 http:// localhost:8080 /信息. This route handler returns a String.
  2. Decode the request’s body using 在foData.
  3. Return the string by pulling the name out of the data variable.

构建并运行应用程序。发送请求休息,您将看到回复返回:

This may seem like a lot of boilerplate to extract a single parameter from JSON. However, Codable scales up and allows you to decode complex, nested JSON objects with multiple types in a single line.

返回json.

Vapor also makes it easy to return JSON in your route handlers. This is a common need when your app provides an API service. For example, a Vapor app that processes requests from an iOS app needs to send JSON responses. Vapor again uses Content to encode the response as JSON.

打开 路线.swift. and add the following struct, called 在foResponse, to the end of the file to return the incoming request:

struct InfoResponse: Content {
  let request: InfoData
}

This struct conforms to Content and contains a property for the request.

Next, replace app.post("在 fo") with the following:

// 1
app.post("在 fo") { req -> InfoResponse in
  let data = try req.content.decode(InfoData.self)
  // 2
  return InfoResponse(request: data)
}

这是改变的东西:

  1. The route handler now returns the new 在foResponse type.
  2. Construct a new 在foResponse type using the decoded request data.

构建并运行应用程序。发送相同的请求休息。您将看到包含原始请求数据的JSON响应:

蒸气排除故障

在本书的过程中,在任何未来的蒸气应用程序中,您可能会遇到项目中的错误。有许多步骤来解决任何问题。

更新您的依赖项

您可能遇到的另一种情况正在击中蒸气或您使用的其他依赖的错误。确保您在任何依赖项的最新包版本上,以查看更新是否修复了该问题。在Xcode中,选择 文件▸swift包▸更新到最新的软件包版本。如果您在终端中运行应用程序,或在Linux上运行应用程序,请键入:

swift package update

此SWIFTPM命令将依赖于依赖项的任何更新,并使用您支持的最新版本 包装。请注意,虽然软件包在Beta或释放候选阶段,但更新之间可能会出现破坏更改。

清洁和重建

最后,如果您仍然存在问题,则可以使用相当于“再次和再次关闭”的软件。在Xcode中,使用 命令option-shift-k 清理构建文件夹。

您可能还需要清除Xcode项目的派生数据以及Workspace本身。 “核”选项包括:

  • 去除 。建造 目录从命令行删除任何构建工件。
  • 去除 .swiftpm. 要删除Xcode工作区和任何错误配置的目录。
  • 去掉 package.resolved. 确保您下次构建时获得最新依赖项。
  • 去掉 DerivedData. 清除额外的Xcode构建工件。

蒸气不和谐

上面的步骤通常修复您可能遇到的大多数问题,这不是由您的代码引起的。如果所有其他人失败,请转到Vapor的Discord服务器。在那里,您可以找到数千名开发人员讨论蒸气,其变化和帮助人们的问题。点击 加入聊天 蒸汽网站上的按钮: //vapor.codes.

然后去哪儿?

本章概述了如何使用vAlp以及如何创建基本路由。本书的前两个部分向您展示了如何构建复杂的应用程序,包括两个部分的API,网站和身份验证。当您通过他们的进展时,您将学习如何使用核心蒸气概念,例如期货,流利和叶子。在第2节结束时,您将拥有一个坚实的基础,在其上建立蒸气中的任何服务器端SWIFT应用程序。

有一个技术问题?想报告一个错误吗? 您可以向官方书籍论坛中的书籍作者提出问题和报告错误 这里.

有反馈分享在线阅读体验吗? 如果您有关于UI,UX,突出显示或我们在线阅读器的其他功能的反馈,您可以将其发送到设计团队,其中表格如下所示:

© 2021 Razeware LLC