在最近的一个项目中,我需要使用各种技术栈来开发应用程序服务。我的一个要求是为应用程序中的每个微服务选择一种不同的编程语言。虽然 Java、Node 和 Python 是很容易的选择,但我还是想尝试一些新的和不太为人所知的语言。在与我的兄弟(他恰好是一位活跃的 iOS 开发者)的一次谈话中,我第一次了解到 Swift 和 Kitura,并决定试一试。
每当我试验一种新语言时,我都会尝试将其与数据库一起使用。在本例中,我将展示使用 Redis 作为基于 Swift 的微服务的数据存储是多么容易。
我将首先简要介绍我的技术栈,然后逐步介绍如何使用这些工具构建应用程序
Swift 是一种通用、多范式、编译型编程语言,由 Apple Inc. 为 iOS、macOS、watchOS、tvOS、Linux 和 z/OS 开发。
Kitura 是一个用 Swift 编写的免费开源 Web 框架,由 IBM 开发并根据 Apache 2.0 获得许可。它是一个 HTTP 服务器和 Web 框架,用于编写 Swift 服务器应用程序。
Redis 是一个开源(BSD 许可)内存数据结构存储,用作数据库、缓存和消息代理。拥有近 15 亿的 Docker 拉取次数,它是最流行的 NoSQL 数据库之一。
首先,从 App Store 下载并安装最新版本的 Xcode。
接下来,检查是否已安装 Swift。在终端中,键入“swift”命令并传递“–version”标志swift --version
Apple Swift 版本 4.2.1 (swiftlang-1000.0.42 clang-1000.10.45.1)
目标:x86_64-apple-darwin17.7.0
如果未安装 Swift,则运行以下 –install 命令
xcode-select --install
安装 Kitura Web 服务器也非常容易。
1. 创建一个新目录来托管您的项目。mkdir MyKituraApp && cd MyKituraApp
2. 将新目录初始化为 Swift 项目。swift package init --type executable
创建可执行包:MyKituraApp
创建 Package.swift
创建 README.md
创建 .gitignore
创建 Sources/
创建 Sources/MyKituraApp/main.swift
创建 Tests/
创建 Tests/LinuxMain.swift
创建 Tests/MyKituraAppTests/
创建 Tests/MyKituraAppTests/MyKituraAppTests.swift
创建 Tests/MyKituraAppTests/XCTestManifests.swift
3. 要将 Kitura 添加到您的依赖项,请编辑 `Package.swift`。
打开 `Package.swift` 并对其进行编辑,使其具有以下文本
// swift-tools-version:4.2 import PackageDescription let package = Package( name: "MyKituraApp", dependencies: [ .package(url: "https://github.com/IBM-Swift/Kitura", from: "2.6.0") ], targets: [ .target( name: "MyKituraApp", dependencies: ["Kitura"]), .testTarget( name: "MyKituraAppTests", dependencies: ["MyKituraApp"]), ] )
4. 构建项目以拉取您的新依赖项swift build
转到源文件夹并编辑 `main.swift`,使其具有以下文本,这将启动 Kitura Web 服务器。
import Kitura let router = Router() Kitura.addHTTPServer(onPort: 8080, with: router) Kitura.run()
5. 由于我们已将代码添加到 `main.swift`,因此您需要重新编译项目swift build
6. 现在您已准备好运行您的 Swift 应用程序。swift run
7. 在浏览器中导航到 https://:8080,它将返回以下内容
在本例中,我使用 Redis Cloud,这是一个完全托管的 Redis 数据库即服务。使用 Redis Cloud 创建 Redis 实例既简单又免费,并且还有其他选项可用(请随意在Redis 入门中探索它们)。
1. 访问 Redis 入门页面,然后单击“云托管”部分下的“注册”。您将进入以下页面
2. 登录以创建您的订阅并选择一个免费的 (30MB) Redis 数据库。
3. 命名您的数据库并激活它。
4. 记下您的数据库端点和密码。
在此示例中,redis-15878.c91.us-east-1-3.ec2.cloud.redis.com 是您的 Redis 数据库的 URL,15878 是端口。
Kitura-Redis 是一个纯 Swift 客户端,用于与 Redis 数据库交互。
1. 要将 Kitura-Redis 添加到您的依赖项,您需要再次编辑 `Package.swift`。
打开 `Package.swift` 并对其进行编辑,使其现在具有以下文本
// swift-tools-version:4.2 import PackageDescription let package = Package( name: "MyKituraApp", dependencies: [ .package(url: "https://github.com/IBM-Swift/Kitura", from: "2.6.0"), .package(url: "https://github.com/IBM-Swift/Kitura-redis.git", from: "2.1.0") ], targets: [ .target( name: "MyKituraApp", dependencies: ["Kitura","SwiftRedis"]), .testTarget( name: "MyKituraAppTests", dependencies: ["MyKituraApp"]), ] )
2. 现在您将使用 Kitura-Redis 与云中的 Redis 数据库建立连接,并使用值“On Swift”设置一个名为“Redis”的键。
这是一个简单的示例,但您当然可以以更复杂的方式使用 Redis。
转到您的源文件夹并编辑 `main.swift`,使其具有以下文本
* 确保使用您的 Redis Cloud 数据库配置更新 、 和 。
import Kitura import Foundation import SwiftRedis let router = Router() Kitura.addHTTPServer(onPort: 8080, with: router) let redis = Redis() //Establish connection with Redis redis.connect(host: "", port: ) { (redisError: NSError?) in //Check for if host and port are incorrect if let error = redisError { print(error) } //If connection to Redis successful then pass in the password else { let password = "" redis.auth(password) { (pwdError: NSError?) in if let errorPwd = pwdError { print(errorPwd) } else { print("Password Authentication Is Successful") } } print("Established Connection to Redis") // Set a key redis.set("Redis", value: "on Swift") { (result: Bool, redisError: NSError?) in if let error = redisError { print(error) } // Get the same key redis.get("Redis") { (string: RedisString?, redisError: NSError?) in if let error = redisError { print(error) } else if let string = string?.asString { print("Redis (string)") } } } } } Kitura.run()
3. 由于您已将代码添加到 `main.swift`,因此您需要重新编译项目swift build
4. 现在您已准备好运行您的 Swift 应用程序,并且将看到以下内容swift run
Redis 密码已验证
已连接到 Redis
Redis on Swift
5. 使用 Redis CLI,您可以检查您在“main.swift”中设置的键值是否成功。redis-15878.c91.us-east-1-3.ec2.cloud.redis.com:15878> Keys *
1) Redis
redis-15878.c91.us-east-1-3.ec2.cloud.redis.com:15878> GET Redis
on Swift
有关更多信息,请访问以下页面
Swift
Kitura
IBM Swift/Kitura
IBM Swift/Kitura-Redis
祝您使用 Redis 的 Swift 编程愉快!