• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

如何在服务器上使用Swift编写代码

自从 Apple 首次推出 swift 作为 Objective-C 的继任者以来,它已经彻底改变了社区编码 iosmac OS、watchOS 和 tvOS 应用程序的方式。当 Swift 成为一个开源平台时,它为移动和客户端应用程序之外的语言开辟了新的可能性——Swift 也成为了一种服务器语言!在本教程中,您将了解什么是服务器端 Swift,以及为什么要在后端使用 Swift。 

服务器端 Swift 计划由三个著名项目推动——Qutheory 的Vapor、  IBM 的 Kitura和 Perfect——目标是让 Swift 开发人员创建成熟的后端服务。从本质上讲,这会将此类开发人员转变为全栈开发人员,从而无需依赖nodephp或将控制权交给诸如 Google 的 firebase 之类的 BaaS平台。 

本文的目标 

在本文中,您将了解有关服务器端 Swift 的所有信息。首先,我将解释服务器端 Swift 的工作原理,然后我将向您展示如何开始使用 Kitura、Vapor 和 Perfect框架。

什么是服务器端 Swift?

Swift 于 2014 年由 Apple 首次发布,并迅速成为增长最快的编程语言之一。Swift借鉴了许多当代最好的语言,例如python,具有优雅和易用性。它将工程师从 Objective-C 的技术枷锁中解放出来,允许更流畅和直观的工作。 

2015 年 12 月,Apple 发布了另一项具有里程碑意义的公告,并将 Swift 语言及其支持库、调试器和包管理器作为 Apache 2.0 许可下的开源项目,为公众开放平台以创建拉取请求和贡献。从 Objective-C 的转变不仅吸引了许多为 App Store 做出贡献的 Objective-C 开发人员,而且使所有技能和背景的开发人员更容易使用 Swift 进入 Apple 生态系统。 

然而,虽然 Apple 的开发工具历来使开发人员更容易为 App Store 创建具有视觉吸引力和吸引力的应用程序,但一个显着的瓶颈是项目仍然需要专门的后端开发人员来创建复杂的数据驱动的应用程序。因此,iOS 和Mac OS 开发人员要么需要 Python、PHP 或 Node 开发人员的帮助来创建他们的后端数据库,要么自己学习技能,从而导致完成项目目标的工作量明显增加。 

尽管后端即服务 (BaaS) 已经拯救了 iOS 开发人员,但谷歌的 Firebase 和苹果自己的 CloudKit等无代码后端解决方案 减轻了后端的复杂性,但许多团队和项目需要更多。这就是服务器端 Swift 的用武之地,它允许您创建一个完全成熟的多线程后端服务器,该服务器是开源的和无限可配置的。 

服务器端 Swift 允许您选择托管后端服务器的方式,无论是使用 aws、RackSpace 还是您自己的物理服务器。您还可以选择如何对服务器进行负载平衡(例如通过流行的服务器解决方案,如 NGINX)以及如何将数据保存在数据库中(无论是 Nosql 解决方案,如mongodb,还是传统数据库,如post gres、mysql或 Oracle )。不仅如此,您永远不会被束缚在一个组件解决方案上——您可以在不影响整个应用程序代码库的情况下进行切换。 

关键是,通过选择开源服务器端 Swift 解决方案,例如 Qutheory 的Vapor、  IBM 的 Kitura或 Perfect,您可以利用大量插件,让您可以按照自己的方式配置后端它,利用你现有的团队在 Swift 中的技能来做到这一点。 

服务器端 Swift 听起来确实很吸引人,但是哪个框架适合你呢?接下来我们依次看看每一个,从 Kitura 开始。

Kitura 入门

概述 

从 Kitura开始,您拥有一个平台,该平台最初于 2016 年 2 月发布,并于当年晚些时候在 Apple 的 WWDC 上获得了关注,这代表了 IBM 进军使用 Swift 支持服务器端 Web 的尝试,该平台随后将从 Apple 手中过渡到开源。 

一般来说,Kitura 专注于约定优于配置:在您选择要构建的特定框架和库之前,它会使用存根构建您的初始项目。Kitura 的身份验证机制由其自己的 Kitura-Credentials 中间件框架支持,允许您从各种身份验证机制中进行选择,从传统的用户名/密码到社交媒体登录和联合身份验证,使用处理 JSON Web 令牌 (JWT )的 OpenID )。

Kitura 的数据库 ORM 解决方案由 Kuery提供支持, 以混淆直接处理 SQL 的复杂性,通过各种其他兼容插件原生支持常见的关系数据库,如 MySQL、sqlite和 PostgreSQL,以及其他数据库解决方案,包括 NoSQL 数据库。 

Kitura 还提供了其他有用的插件,例如 html模板,使用流行的插件,如 Stencil 和 Markdown。该服务器端框架来自 IBM,还受益于与 IBM Watson api的紧密连接,并为直接集成到其 Bluemix 云平台提供原生 macOS 支持。这为您提供了一个额外的选项,以及您跨 Linux/Unix 和 macOS 服务器的其他传统部署选项。 

虽然该平台确实提供了一组独特的功能——从 Kuery 到与各种 IBM API 库集成的能力——但它没有 Vapor 所拥有的社区影响力。采用 Kitura需要欣赏和接受其非传统的做事方式,从 Kuery 的运作方式到其身份验证机制。但是,鉴于它得到了一家专注于企业的大公司的支持,因此内置了一些面向未来的保证。 

如何在服务器上使用Swift编写代码  第1张

安装和运行 Kitura

最快的入门方法是使用 Kitura 的命令行界面 (CLI),它在 macOS 和 Linux 上均受支持。使用流行的包管理实用程序 homebrew,通过输入以下命令安装 Kitura 和 Kitura CLI:

$ brew tap ibm-swift/kitura
$ brew install kitura

在您将用作项目的空文件夹中,运行以下命令来初始化您的项目:

$ kitura init

完成生成骨架应用程序后,您会注意到一个名为 HelloKitura.xcodeproject的新项目。您可以通过参考 Kitura 的官方文档了解更多关于项目生成的信息。您可以在 Xcode 中打开新生成的项目并编辑主应用程序类 Application.swift来处理对服务器根http://localhost:8080/  URL 的所有调用:

// Handle HTTP GET requests to "/"
router.get("/") { request, response, next in
    response.send("Hello, World!")
    next()
}

上面的代码片段通过返回经典的Hello, World!来响应。. 在您最终运行项目之前,将您的 Xcode 方案更改为指向 HelloKitura(您的活动项目),然后按 Command - R启动您的项目。当您的服务器正在运行时,在您选择的浏览器中,转到 http://localhost:8080 ,您应该会在浏览器中看到 hello world 文本。 

更多信息

查看以下链接以获取有关 Kitura 的更多信息。

  • Kitura.io

  • Kitura 软件包/插件

  • Kitura 帮助

开始使用蒸汽

概述 

2016 年 9 月,Qutheory 的Vapor比 Kitura 晚几个月发布,  就社区规模和插件数量而言,它被广泛认为是最受欢迎的。它建立在 Apple 的 Swift-nio 框架之上,使其成为真正的性能强国。与 Kitura 和其他平台不同,它们不是纯粹用 Swift 构建的,而是在 Node.js 或其他中间解析器上构建的,Vapor 将自身与任何这些依赖项解耦,以提供 Swift 解析器并提供清晰易读的 API。

如何在服务器上使用Swift编写代码  第2张Vapor 为 MySQL 和 PostgreSQL 等 SQL 供应商以及如Kitura等 redis 和 MongoDB 等NoSQL 供应商提供全面的数据库支持。Kitura 有自己的 Kuery  ORM 解决方案,而 Vapor 利用 Fluent ORM 来支持我刚才提到的数据库,使得将 ORM 扩展到其他第三方数据库提供商相对容易。Vapor 在原生支持 Apple 的推送通知服务以及支持 SMTP 以推送电子邮件通知方面将自己与其他框架区分开来。 

虽然 Kitura 实现了自己的身份验证框架,但 Vapor 原生内置了 Stormpath 的 Turnstile 身份验证库 。与 Kitura 一样,该平台也支持 Mustache 和 Markdown 模板,以及它自己的 Swift 原生表达模板语言 Leaf。与其他服务器端 Swift 框架一样,Vapor 还带有自己的 CLI 引擎,能够使用自定义标志扩展应用程序命令行参数。 

安装和运行

要开始使用 Vapor,首先要安装 Vapor 工具箱,它包含所有库依赖项和 CLI 工具包。 通过在终端中输入以下内容,使用homebrew安装它:

$ brew install vapor/tap/vapor

安装完成后,您可以通过键入 确认vapor —helpVapor 已成功安装。要创建项目,请输入以下内容,并替换为您自己的项目名称:

$ vapor new <PROJECT_NAME>

Vapor 引擎将构建一个类似于以下的文件夹结构:

.
├── Public
├── Sources
│   ├── App
│   │   ├── Controllers
│   │   ├── Models
│   │   ├── boot.swift
│   │   ├── configure.swift
│   │   └── routes.swift
│   └── Run
│       └── main.swift
├── Tests
│   └── AppTests
└── Package.swift

要实际创建 Xcode 项目,您还需要从项目文件夹中显式输入以下命令: 

$ vapor xcode

最后,要构建和运行您的项目,从 Xcode 中选择Run方案以及My Mac的部署目标设备 ,然后像对任何其他 Xcode 项目一样按运行按钮。如果您的 Xcode 项目没有遇到任何错误,您应该会在终端中看到以下确认消息:

Server starting on http://localhost:8080

继续并在您选择的浏览器中输入该 URL,您应该会看到您的应用程序正在运行。 

更多信息

查看以下链接以获取更多信息。

  • 官方蒸汽文档

  • 蒸汽 GitHub 存储库

完美入门

概述

最后,我们来看看 PerfectlySoft 的Perfect  ,它是一个功能丰富的服务器端平台,如 Vapor 和 Kitura。Perfect 包括您在以前的供应商中可以找到的相同标准的花里胡哨,从使用 Mustache 或 Markdown 的模板到使用 web socket s 的网络,以及 Apple Push Notification 和 SMTP。

如何在服务器上使用Swift编写代码  第3张

与其他服务器端平台一样,Perfect 也有自己的 ORM 实现,即 StORM 平台 (Perfect StORM),它为 MySQL、PostgreSQL 和其他著名的关系数据库以及 MongoDB、Redis 和其他 NoSQL 解决方案提供原生支持。Perfect 的一个显着遗漏是 CLI,但该框架使用本机 macOS 应用程序弥补了这一点。

与 Vapor 一样,Perfect 也 嵌入了Turnstile 来支持其身份验证机制,并扩展为与 StORM 进行更密切的交互。此解决方案与其他解决方案相比的另一个区别在于它支持的许多本机实用程序库,包括它们自己的curl包装器以及用于处理文件和文件夹的工具。Perfect 的开发者基础是第二大的,几乎与 Vapor 相当,这意味着你有一个强大的社区来支持这个平台,以及丰富的教育资源,让你在选择它时充满信心。

安装和运行

使用 Perfect 启动和运行非常简单。首先,通过输入以下内容克隆 PerfectlySoft 存储库:

$ git clone https://github.com/PerfectlySoft/PerfectTemplate.git

从克隆的文件夹中,构建项目:

$ swift build

最后,运行项目,它将在地址 0.0.0.0:8181上运行本地服务器:

.build/debug/PerfectTemplate

您也可以通过首先生成一个新项目在 Xcode 上运行您的项目,如下所示:

$ swift package generate-xcodeproj

在 Xcode 中,确保您的可执行目标指向 My Mac,然后再构建和运行项目。

更多信息 

查看以下链接以获取有关 Perfect 框架的更多信息。

  • 官方完美文档

  • 风暴文档

结论 

向开源社区发布 Swift 推动了对客户端应用程序之外的 Swift 解决方案的推动,后端服务器框架成为下一个前沿。在三个著名项目(Qutheory 的Vapor、  IBM 的 Kitura和 Perfect )的推动下,服务器端 Swift 使 iOS(和 macOS)工程师成为全栈开发人员。这可以消除对 Node.js、PHP 或 .NET 后端工程师的依赖。服务器端 Swift 还使团队能够控制他们的后端,而不必依赖 Firebase 或 CloudKit 等移动后端即服务解决方案。


文章目录
  • 本文的目标
  • 什么是服务器端 Swift?
  • Kitura 入门
    • 概述
    • 安装和运行 Kitura
    • 更多信息
  • 开始使用蒸汽
    • 概述
    • 安装和运行
    • 更多信息
  • 完美入门
    • 概述
    • 安装和运行
    • 更多信息
  • 结论