Tag: 服务器端Swift

Server Side Swift入门:1.1

Turnstile SQLite演示 欢迎来到我的“ Server Side Swift入门”系列的第二部分。 在整个系列文章中,我将解释如何使用Perfect工具箱使用Server Side Siwft的各个不同方面进行入门和运行的基础知识。 本文演示了如何运行Turnstile SQLite演示并探索其Web路由和API,以及深入研究SQLite数据库并找出导致会话滴答的原因。 Turnstile是Stormpath构建的身份验证过程,其模仿Apache Shiro。 Perfect已将其作为该项目的身份验证选项之一,并带有SQLite,MySQL,CouchDB,PostgreSQL和MongoDB的驱动程序。 SQLite是一个出色的教学数据库工具,因为它基于文件,并且几乎不需要任何设置,并且所有Mac和大多数Linux系统都将SQLite作为标准配置。 但是,我不建议在大规模生产系统中使用它。 首先,如果您尚未获得Perfect Assistant应用程序,请访问https://www.perfect.org/en/assistant/以下载Perfect Assistant。 在“欢迎”屏幕上,单击“创建新项目”按钮。 这将滑落为两种项目类型的工作表。 在“示例”下,选择“完美:带有SQLite的旋转门”。 使用“浏览按钮”选择应用程序的位置-并根据需要创建一个新文件夹。 请注意,在Perfect Assistant中,“项目名称”是您选择的文件夹的名称。 取消选中“将Linux构建与Xcode项目集成”,因为在本演练中我们不会部署到Linux。 按下“保存”后,Perfect Assistant将继续创建项目,下载所有依赖项并创建Xcode项目文件。 完成后,您的项目也将列在左侧的“项目”列表中。 它向您显示了项目中已经存在的依赖关系-如果您没有看到自己认为应该存在的内容,请不要担心,子依赖关系也会自动包含在内。 从这里,您还可以在查找器或终端窗口中打开项目目录,然后打开Xcode项目。 在Xcode中,打开Sources目录,您将看到许多其他依赖项已自动添加到我们的项目中。 添加这些是因为它们是子依赖项。 在我们的项目源目录中是一个main.swift文件。 这包含用于运行演示的代码。 需要指出的几件事。 在第38行,我们在此处定义SQLite数据库文件的位置-SQLiteConnector.db属性设置为“ ./authdb”。 SQLiteConnector.db =“ ./authdb” 因为SQLite是基于文件的数据库,所以我们可以将文件放置在所需的任何位置,但是在这种情况下,我们告诉应用程序将其放置在运行时工作目录中。 您还将在项目浏览器中注意到,我们有一个名为“ webroot”的目录。 这是我们保留CSS,JavaScript和图像之类的静态资产以及胡子模板的地方,我们将在本系列的另一部分中介绍这些模板。 由于存在诸如SQLite数据库和webroot目录之类的文件,因此我们需要告诉Xcode在何处考虑“工作目录”。 在“方案”下拉列表中,确保选择“具有终端外观”的黑色图标,并确保目标是“我的Mac”。 现在,让我们选择“编辑方案”。 在“运行->选项”选项卡中,确保选中“工作目录”选项,然后单击文本输入区域中的“文件夹”图标并导航到项目的目录。 在这里,您将看到“ Sources”目录和“ webroot”。 现在可以运行项目-按下三角形的“运行”按钮,或在键盘上按下CMD-R。 构建完成后,Xcode将执行该应用程序,并在右下侧控制台视图中显示一条消息,表明它已在端口8181上启动HTTP服务器。 [INFO]运行设置:用户 […]

关于配置和启动API服务器的实用指南-完美

有很多方法可以配置和启动Perfect Server。 本指南介绍了用会话 , 路由 , 过滤器和日志记录配置Perfect服务器的最佳实践。 届会 如果我们计划在服务器端Swift上进行会话,则需要在启动服务器之前对其进行配置。 这是我的示例配置,可以根据您的需求进行自定义: 另外,我们需要调用let sessionDriver = SessionMySQLDriver()来配置会话过滤器,并使用purgeInterval来清除停滞的会话。 CORS 为了使您的API与单页面应用程序(react,vue.js或Angular)一起使用,我们需要配置跨域引用共享(CORS) 。 您可以在此处阅读有关CORS的信息: 跨域资源共享(CORS) 跨域资源共享(CORS)是一种使用其他HTTP标头让用户代理获得…的机制。 developer.mozilla.org 以下是CORS配置的工作示例。 启动服务器之前,我们可以在主目录中调用CORS.configure() 。 确保定义了所有自定义的HTTP标头和可接受的主机名,否则将不接受Web客户端使用您的api! 👈 CSRF 跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在当前已通过身份验证的Web应用程序上执行不需要的操作。 CSRF攻击专门针对状态更改请求而不是数据盗窃,因为攻击者无法看到对伪造请求的响应。 您可以在此处阅读有关CSRF的信息: 跨站请求伪造(CSRF)– OWASP 跨站请求伪造(CSRF)是一种攻击,迫使最终用户在Web应用程序上执行不需要的操作… www.owasp.org 为了避免CSRF攻击,我们需要配置服务器。 以下是可以根据需要自定义的示例。 我们可以在启动服务器之前在主目录中调用CSRF.configure() 。 模式初始化 由于我们需要会话和数据库连接,因此需要在启动服务器之前对其进行配置。 我们可以将数据库,SMTP,会话等的所有配置都放在JSON并使用它来配置我们的服务器。 我们可以有针对不同环境的配置。 以下示例显示了如何为macOS和Linux不同地配置服务器: 典型的配置文件如下所示: 然后,我们可以像下面这样设置DB , session和SMPT配置: let opts = initSchema(fname) 这还会返回启动服务器时将使用的baseURL , httPort …。 […]

使用Vapor Server Side Swift框架存根XCUITests

最初在XCBlog上发布在这里 毫无疑问,Swift是用于为iOS,macOS,watchOS和tvOS等Apple平台开发本机应用程序的出色语言。 但是,作为一种新语言,Swift缺少许多测试功能,就像我们在其他编程语言(如Ruby)中看到的那样。 在Swift中使用协议模拟类非常困难,并且存根网络请求的选项非常有限。 模拟是脆弱而艰苦的,到Swift时模拟变得更加困难。 Swift中没有可用的成熟模拟库来生成类似Java,Ruby,Python或其他语言的模拟。 开发人员必须手动编写所有模拟,并将测试代码与生产代码紧密耦合。 这里有一篇很棒的关于iOS网络测试的文章,以了解有关如何使用协议进行模拟的更多信息。 存根是测试代码的另一种方式,而不必依赖后端或网络。 使用存根,我们仍然可以实现网络测试的目标,并且不必将测试代码与生产代码紧密耦合。 我们将看到可用于存根的库的详细信息。 一些最受欢迎的库是用于XCTest(unit)测试的OHHTTPStubs,Mockingjay,Hippolyte。 用户界面测试贯穿网络层,涵盖了网络测试的所有方面。 苹果有XCUITest框架来涵盖Xcode UI测试。 我们可以使用一些库来为UITest存根网络。 一些流行的库包括Swifter,SBTUITestTunel和XCUITest(UITest)的Embassy。 但是,市场上出现了新的服务器端Swift框架,例如Vapor,Kitura,Perfect,它们也可以用于暂存网络请求。 在这篇文章中,我们将看到如何使用Vapor服务器端swift框架对网络请求进行存根。 Apple在WWDC 2015上宣布了Xcode的UI测试支持。UI测试被设计为完全黑盒,无需访问主应用程序代码和数据。 XCUITest使用两个独立的进程Test Runner和Target应用程序,测试运行器启动了目标应用程序,并使用UIKit内置的可访问性功能与在单独进程中运行的应用程序进行交互。 在嘲笑或测试UITest时,我们几乎没有选择 模拟和通过发射参数/环境 这意味着您不能直接模拟API。 与代理应用程序通信的唯一方法是传递启动参数或启动环境。 我们可以传递模拟API并创建启动环境变量,然后将其传递给XCUITests,但这需要大量的工作。 代码用if-else语句括起来,以确定听起来不太好的构建配置。 Web服务器存根后端并返回响应 剩下的其他选择是对网络呼叫进行存根并从服务器获取所需的数据。 为此,我们需要模拟后端并指向我们的应用程序以使用这些端点。 问题是我们是否仍可以使用上面提到的存根服务进行单元测试。 我们仍然可以使用这些库来处理网络请求,但是有时它需要更改主应用程序的逻辑,并且需要重构某些东西以增加额外的工作。 我们需要在生产代码中添加很多测试代码。 在我先前关于XCUITest的网络存根选项的文章中,我们介绍了所有选项,例如Swifter,SBTUITestTunel和Embassy for XCUITest。 现在,让我们详细介绍一下Vapor。 服务器端Swift框架尚未投入生产,但我们可以将其用于存根XCUITest的目的。 我还没有在互联网上读过任何人做的书,但是它工作得很好。 市场上几乎没有可用的Server Side Swift框架,例如Perfect,Kitura,Zewo和Vapor,但在此演示中,我们将使用Vapor。 选择蒸气的原因是它很容易学习,并且蒸气周围的社区正在迅速发展。 它完全由Swift编写,并带有易于上手的Vapor工具箱。 为了演示此功能,我创建了一个演示应用程序,当我们在文本字段中输入Github用户名时,它将显示Github用户信息。 您可以从Github Vapor-XCTest克隆该应用程序,该应用程序具有带有和不带有存根的XCUITests。 您需要安装Xcode 9+和OpenSSL,然后我们才能签出演示应用程序。 $ git clone https://github.com/Shashikant86/Vapor-XCTest […]

蒸气3发布时间表

服务器端Swift框架Vapor的最新版本即将完成! 在考察Swift 4.1及其对蒸气的影响时,我们决定与Swift 4.1一起发布3.0。 这意味着我们无法给出具体的发布日期(除非Apple发布了发布日期)。 但是,我们已经决定了适用于早期采用者的GM(候选发布)版本的具体发布日期。 斯威夫特4.1 Swift 4.1是Swift最大和最佳的“ .1”版本之一。 头条新闻当然是条件一致性。 Vapor团队(在字面上)一直在焦急地等待着这一点。 尽管此功能将在4.1中发布是一个好消息,但它确实对Vapor 3造成了问题。条件一致性对我们框架的核心有很大影响-它不是纯粹的累加更改。 使用Swift 4.1进行编译时,我们过去用来解决Swift 4.0中没有条件一致性的hacks将会失效。 要让Vapor 3与Swift 4.0和4.1一起使用,将意味着在我们最关键的代码区域中会有大量的#if swift(>=4.1) / #else / #endif宏。 此外,macOS安全性库中的一个严重错误已阻止Swift 2.1编译了我们的HTTP / 2代码。 这意味着我们可以依靠4.1发行带有本地HTTP / 2支持的Vapor 3。 考虑到这些问题,我们认为最大程度地减少错误,混乱和维护人员时间的最佳选择是只需要Swift 4.1。 可以从Swift.org快照站点下载适用于macOS和Ubuntu的Swift 4.1。 不需要Xcode 9.3 beta。 很快,Vapor 3的beta分支将开始依赖Swift 4.1。 Beta.1 Beta.1发行版将于2月9日发布,这将是Vapor 3的第一个带有完整标签的发行版(其正确存储库中的模块)。 这将意味着大大提高稳定性,因为您必须通过修改Package.swift文件来选择加入更新(仅swift package update不会破坏您的代码)。 此外,在2月9日之后,打破变更必须是考虑合并的关键问题。 我们希望教程作者在此之后开始发布早期的Vapor 3内容(包括精彩的Ray Wenderlich备受期待的视频系列)。 这将是开始试用Vapor 3的好时机。对于软件包维护者来说,这将是更新软件包的好时机。 […]

服务器端Swift的启动和运行:第1部分-待办事项列表项目设置

我已经想要了一个基本的,基于浏览器的待办事项列表。 没有任何干扰的东西。 使用Swift构建此库,并了解一些涉及的库似乎是一个不错的起点。 这是一个分为4部分的系列文章,概述了如何设置项目,路由入门,数据库设置以及最终创建应用程序的模型和控制器。 介绍 第1部分将概述一个基本的项目设置,包括使用swift软件包管理器,并让我们开始使用Swift从服务器返回响应中的一些文本。 项目设置 首先,让我们为项目创建一个目录,然后导航到该目录。 mkdir WhatsNext cd WhatsNext 接下来,我们将使用swift软件包管理器创建一个swift可执行软件包。 swift package init –type可执行文件 现在,生成一个xcode项目。 迅捷包generate-xcodeproj 打开项目并切换到第二个目标。 生成并运行,您应该会在控制台中看到“世界,您好!”。 打开WhatsNext.xcodeproj 完美的服务器设置 添加perfect-HTTPServer作为项目的依赖项。 打开Package.swift并将以下内容添加到您的依赖关系中。 .package(网址:“ https://github.com/PerfectlySoft/Perfect-HTTPServer.git”,来自:“ 3.0.0”) 还要将”PerfectHTTPServer”添加为目标的依赖项。 如果您使用的是Swift 3,则上述语法可能会遇到问题。 你可以在这里找到更多。 您最终的Package.swift应该看起来像这样…… 现在,回到终端并更新项目相关性并重新生成xcodeproj。 快速软件包更新 迅捷包generate-xcodeproj 假设没有问题,请将以下导入添加到main.swift的顶部,然后构建并运行。 导入PerfectLib 导入PerfectHTTP 导入PerfectHTTPServer 服务器需要服务 因此,我们的Web服务器需要提供目录或文件。 为了简单起见,我们将在我们的项目中创建一个名为webroot的文件夹,并在其中添加一个文件供我们的项目使用。 mkdir Webroot 触摸webroot / hello.txt 迅捷软件包regenerate-xcodeproj 添加一些占位符文本以了解正在提供文件。 接下来,我们需要在main.swift创建服务器。 我们创建一个服务器,设置其端口和documentRoot,启动它并捕获它将引发的任何异常,例如该端口已被使用。 在运行之前,我们需要将目标的文档根目录设置为项目目录。 为此,选择第二个目标,然后edit sceme […]

在AWS上部署服务器端Swift

开发完应用程序后,下一步就是将其提供给您的受众群体使用……因此,自然的愿望是将其部署到服务器上。 尽管可以将Swift应用程序部署到任何Ubuntu 16服务器,但在本文中,我将重点介绍如何使用Perfect Assistant部署到AWS实例。 如果要遵循,则需要满足三个先决条件:Perfect Assistant应用程序,Mac上可运行的Docker应用程序以及一个AWS账户。 AWS设置 从AWS收集的一些信息: 存取金钥ID和机密 公钥/私钥对 安全小组 访问密钥和秘密 创建新的访问密钥和机密的步骤: 访问https://console.aws.amazon.com/iam/ 从侧面导航中选择“用户” 如果您没有IAM用户,请创建一个,确保添加“程序访问”复选框,然后单击“直接附加现有策略”,然后选择“ AmazonAPIGatewayInvokeFullAccess和AmazonEC2FullAccess”属性。 这将创建一个具有密钥和机密的新用户帐户。 记下它们! 如果您已经拥有IAM用户帐户,请选择所需用户的名称,然后选择“安全凭据”选项卡。 单击“创建访问密钥”按钮,并记录密钥的ID和秘密。 公钥/私钥对 接下来,我们要创建一个新的公钥/私钥对。 转到“ EC2”部分,在导航中单击“密钥对”,然后单击“创建密钥对”按钮。 确保下载后! 将下载的文件(以“ .pem”结尾)放入“〜/ .ssh /”。 这使使用SSH连接到远程系统的应用程序(例如助手)可以访问它。 安全组 接下来,单击导航中的“安全组”,然后单击“创建安全组”。 给您的新组一个简短的名称和描述,然后选择“入站”选项卡,单击“添加规则”。 对于本演示,我建议您添加端口8181并在源下拉列表中选择“ Anywhere”,并确保您从当前IP地址添加SSH访问。 配置完美助手 单击“确定”,返回至Perfect Assistant,在“欢迎”屏幕上,单击EC2框中的“配置EC2凭据”按钮。 这将打开一个新窗口,您可以在其中添加新的凭据。 单击“创建”,为您的新凭证设置命名,然后输入我们从AWS获得的访问密钥和机密。 “区域”应该是您设置的在地理位置上接近您或大多数受众的地方。 按“保存”将锁定配置。 设置演示应用程序以进行部署 接下来,让我们从GitHub上获取“ Perfect App Template”。 仍在“欢迎”屏幕中,单击“创建新项目”,“自定义存储库URL”。 单击位置旁边的“浏览”,然后为模板找到URL,然后粘贴模板的URL:“ https://github.com/PerfectlySoft/PerfectAppTemplate.git” 保留“将Linux构建与Xcode项目集成”的复选框,因为我们在此阶段的目标是Linux部署。 单击“保存”后,系统将启动它是macOS端项目的初始克隆。 进行Linux构建非常简单,只需单击“ BUILD:Linux”按钮。 […]

Swift Package Manager基础

请注意,每个依赖项也可以具有自己的依赖项。 因此,如果您包含“ Perfect-HTTPServer”库,则它包含“ Perfect-HTTP”,其中包含“ PerfectLib”,因此无需在您自己的Package.swift文件中包含PerfectLib。 模块布局 关于在何处以及如何创建模块的规则很少。 您的所有源代码都可以在一个文件中,也可以在多个文件中。 但是,所有这些文件都必须位于Sources目录中。 请注意,如果您希望在Sources目录中有子目录,则该Sources目录中必须有一个与Package.swift中的包名称相对应的“父”目录。 例如,Perfect App Template在Sources中有一个名为“ Perfect-App-Template”的目录,该目录与Package.swift文件中的软件包名称相对应。 语义版本控制 SPM假定依赖项存储库遵循“语义版本控制”命名。 这意味着每个标签由3个组件组成,每个组件都是整数:“主要”版本,“次要”版本和“补丁”。 一般规则是,当中断和更改不兼容的API时,将增加主要版本。 引入应该向后兼容的功能时,次要版本会逐渐增加,而补丁版本则用于错误修复或改进。 例如: “ 1.2.4”表示此库的主要版本为1,次要版本为2,补丁程序级别为4。 为SPM合并语义版本控制 在Packages.swift文件中,我们看到每个软件包都具有关联的“ majorVersion”属性。 这意味着当执行初始构建(或先清理然后再构建)时,该过程将在该主要行中获取该程序包的最高标记版本。 例如: .Package(URL:“ https://github.com/PerfectlySoft/Perfect-HTTPServer.git”,majorVersion:2) 将获取主要版本2中的最高版本,当前版本为2.1.15 如果存在3.xx版本,将被忽略,仅将获取2.xx版本。 相反,如果我们需要2.0.x版本,则可以指定: .Package(网址:“ https://github.com/PerfectlySoft/Perfect-HTTPServer.git”,majorVersion:2,minorVersion:0) 这将获取2.0.x行中的最高补丁程序级别。 添加或删除依赖关系 对Packages.swift文件进行任何更改后,我强烈建议您做两件事:清理和构建,以及Xcode项目文件的重新生成。 清理和重建: #迅速3.0.2 迅速建立–clean = dist; 快速构建 #迅捷3.1 快速软件包更新; 快速构建 要重新生成Xcode项目: 迅捷包generate-xcodeproj 专家提示:使用Perfect Assistant 尽管可以使用命令行和手动编辑文件来实现所有这些功能,但使用Perfect Assistant实际上更容易。 甚至那些认为自己是服务器端Swift超级用户的用户都默认使用PA(完美助手),因为它可以更快,更容易地拖放,按下几个快速按钮。 在PA中添加依赖项就像将依赖项拖放到项目的“ Selected […]

Server Side Swift入门:1.2

StORM简介 欢迎来到我的“ Server Side Swift入门”系列的第三部分。 在整个系列文章中,我将解释如何使用Perfect工具箱使用Server Side Siwft的各个不同方面进行入门和运行的基础知识。 今天,我将介绍Swift ORM“ StORM”,它旨在与Perfect及其数据库连接器一起使用。 我将介绍如何设置一个与StORM一起使用的类,以及读取,写入和删除数据的基础知识。 首先,让我们看看什么是ORM。 ORM代表对象关系映射,它是一种方法,旨在提供快速代码中的对象与数据库条目之间的链接。 这意味着您可以在代码中创建和填充对象,然后调用“保存”命令,它将保存记录-如果记录已经存在,则对其进行更新,否则将创建一个新记录。 相反,您还可以指示ORM从数据库中获取特定行,它将填充对象,或者如果多行符合您的查找条件,则返回有序对象数组。 最后,ORM将帮助您删除条目。 所有这些都无需创建所有连接,处理所有数据库打开/关闭操作以及处理数据库操作通常需要的所有其他详细代码。 这些都覆盖在ORM中,因此您不必这样做。 但是,ORM的真正魅力在于另外两个概念: 如果您使用的是SQL数据库,则无需了解SQL即可完成所有这些操作。 其次,从一个数据库到另一个数据库的基本操作和语法应该完全相同。 “获取”操作与您使用MySQL一样,与MongoDB相同。 与“保存”或“删除”相同。 今天,我们将使用SQLite StORM来研究Perfect中的ORM操作。 如前所述,所有这些操作对于其他StORM变体几乎都是相同的:MySQL,Postgres,CouchDB和MongoDB。 首先,让我们在Perfect Assistant中创建一个新项目。 我们将创建一个“空可执行项目”,并将其命名为“ StORMDemo” 现在,它现在完全没有依赖项-让我们添加SQLiteStorm依赖项…,然后按“保存更改”。 立即它将开始获取所有需要的文件,并将重新创建Xcode项目。 完成后,单击“打开:Xcode项目”按钮。 打开main.swift,默认为print hello world语句。 在运行之前,我们需要选择可执行的目标方案,而在执行该方案时,我们将设置项目工作目录,稍后将需要它。 运行此命令,我们看到“ Hello,World!”已在控制台视图中打印出来,然后该程序存在。 与一直运行直到关闭的Web服务器可执行文件不同,此可执行文件是简单的运行和退出。 这个“ Hello,World!”不是我们想要的—第一步是定义数据库配置。 对于SQLite,我们只需要设置一件事-数据库名称和位置。 对于其他用户,您必须设置IP地址,端口,用户名和密码等参数,但是使用SQLite作为教学工具要容易得多。 首先,我们需要添加到main.swift文件中: 导入SQLiteStORM 进口StORM SQLiteConnector.db =“ ./stormdemo” 这告诉ORM该文件的位置和名称在我们工作目录的表面,因此将其称为“ stormdemo” 我们需要做的下一件事是添加一个类,为其提供一些属性,并将其连接起来以供ORM使用。 为我们的课程Monster.swift创建一个新文件 […]

SwiftNIO的协议缓冲区

总览 您可以在.proto文件中定义消息模式,然后使用protobuf编译器为您的语言生成数据结构,从而减少编写样板分析和数据访问代码的过程。 然后,您可以与系统的其他部分共享此.proto文件,并为这些语言生成数据访问类。 例如,您可能有一个Java后端以及一个iOS,Android和Web前端,它们都共享此.proto文件来定义共享模式。 优点 Protobuf设计为快速而紧凑。 根据Google的说法,协议缓冲区比XML 小3至10倍,并且快20至100倍 。 Protobuf与语言无关,并提供向后兼容性。 您可以使用完全不同的语言,用新的高性能系统组件替换旧的缓慢系统组件,并确信只要您使用相同的.proto模式,系统就可以继续工作。 实际上,您甚至可以在.proto文件中的消息格式中添加新字段,并且系统将继续运行。 具有旧.proto系统在解析时将仅忽略新字段。 缺点 Protobuf并不适合所有人,尽管它们支持多种语言,但可能不支持您的语言。 XML和JSON比Protobuf更具可读性。 由于它们的设计紧凑,因此当它们通过网络发送时,protobuf会删除字段名称。 仅当您具有.proto文件时,protobuf才有用。 Google设计了用于应用程序间通信的协议缓冲区。 如果您正在构建供外部消费者使用的公共API,则您确实不希望服务器的客户端使用您定义的.proto文件,为其服务生成数据访问类并以这种方式与您的服务进行通信。 入门 您将需要protobuf编译器来生成特定于语言的文件。 这里有安装说明:https://github.com/apple/swift-protobuf。 由于已经安装了Homebrew,因此选择了Homebrew选项。 $ brew install swift-protobuf 注意:此安装可能需要一些时间… 要检查其是否正确安装,可以键入: $ protoc-版本 //我的输出是libprotoc 3.5.1 .proto Protobuf使用扩展名.proto作为其文件格式。 您创建.proto文件来定义您的消息传递模式,然后运行protobuf编译器生成您的Swift代码。 您可以使用任何IDE或文本编辑器来创建.proto文件,包括Xcode。 但是,我不喜欢使用Xcode的原因是缺少适当的缩进和语法突出显示。 我最终在他们的市场中使用了VS Code以及免费的vscode-proto3 protobuf扩展。 现在,我们已经安装了protobuf编译器,让我们创建一个将通过网络发送的Movie类型。 创建一个名为movie.proto的新文件。 .proto文件的第一行是要使用的协议缓冲区版本。 在撰写本文时,我们将使用最新版本proto3。 语法=“ proto3” 接下来,我们使用message关键字声明消息类型。 对于我们来说,这将是Movie类型的消息。 消息电影{ } 接下来,为电影类型声明一个枚举。 您可以在全局范围内的message外部声明一个枚举,但是对于我们的示例,由于流派正在描述电影,因此我们将在Movie内部声明它。 消息电影{ […]

Server Side Swift入门:1.0

完美的模板 欢迎来到我的“ Server Side Swift入门”系列。 在整个系列文章中,我将解释如何使用Perfect工具箱使用Server Side Siwft的各个不同方面进行入门和运行的基础知识。 今天,我将展示如何使用Perfect Assistant应用程序以Perfect Template为基础来启动新的Server Side Swift项目。 首先,如果您尚未获得Perfect Assistant应用程序,请访问https://www.perfect.org/en/assistant/以下载Perfect Assistant。 在“欢迎”屏幕上,单击“创建新项目”按钮。 这将在第一个按钮为“ Perfect Template App”的工作表上向下滑动。 这是我们想要的按钮,因此请继续单击它,然后按“下一步”。 使用“浏览按钮”为您的应用选择位置-并在需要时为其创建一个新文件夹。 请注意,在Perfect Assistant中,“项目名称”是您选择的文件夹的名称。 您可以根据需要更改此设置。 就本演示而言,请取消选中“将Linux构建与Xcode项目集成” -在我们构建或运行时,这会解锁其他linux二进制构建,从而使我们可以了解任何特定于Linux的构建问题。 但是,在这种情况下,这与我们无关。 按下“保存”后,Perfect Assistant将继续创建项目,下载所有依赖项并创建Xcode项目文件。 完成后,您的项目也将列在左侧的“项目”列表中。 它显示了项目中已经存在的依赖项,以及可以根据需要将其拖入其中的其他依赖项。 从这里,您还可以在查找器或终端窗口中打开项目目录,然后打开Xcode项目。 在Xcode中,首先让我们稍微整理一下工作区。 我建议关闭右侧的“实用程序”窗格,因为此处不相关,并打开“调试/控制台”空间。 让我们先看一下Package.swift: 您将看到它设置了项目的名称,并为我们提供了Perfect-HTTPServer的基本依赖关系。 但是,在展开Sources组时,您会看到许多其他依赖项已自动添加到我们的项目中,例如PerfectLib,Open SSL,Thread,Net。 之所以添加这些是因为它们是HTTP Server模块的子依赖项。 在我们的项目源目录中是一个main.swift文件。 其中包含用于运行Web服务器模板的代码-一种简单的处理程序,一种简单的路由。 该处理程序将仅输出标题和正文为“ Hello,world!”的HTML文档。