本文是Heimdall源代码的简要概述,并说明了为Vapor Web Framework编写第三方插件的过程。 去年,一位导师建议我为Vapor Web框架编写一个记录器。 最初,这似乎是一个复杂的任务,但结果再简单不过了。 让我们创建一个插件! 创建一个Swift包 蒸气插件必须是快速软件包,因此可以使用Swift Package Manager导入。 因此,首先需要在终端上运行以下命令来创建一个快速包。 麦克迪尔·海姆达尔 光盘海姆达尔 swift package init –type可执行文件 这将创建以下目录结构。 删除Sources目录中的main.swift文件。 Heimdall只是2个快速文件,而且少于200行代码! 以下是这两个文件的说明,没有实现细节。 如果您想查看所有代码,请参考github repo。 记录仪 HTTP记录器做什么? 它访问有关每个请求和响应的信息,例如状态码,HTTP方法等,并将其写入文件。 您需要创建一个“中间件”,该中间件针对每个请求运行,并将数据简单地写入文件。 以下代码片段显示了没有实现细节的基本中间件。 类记录器:中间件{ var path:字符串=“〜/ Logs / logfile.txt” //此方法针对每个Web请求运行 公共功能响应(请求:请求, chainingTo next:Responder)throw-> Response { //从响应对象访问数据 writeToFile(dataToBeLogged) } func writeToFile(path:){ //编写写入文件的快速代码 } } 记录仪与蒸气项目集成的提供商 现在您有了一个记录器,但是其他开发人员将如何在您的项目中导入您的记录器? 要添加功能或为Vapor创建第三方程序包,您需要创建一个“提供程序”。 提供者提供了一种在Vapor Web App中导入第三方程序包的统一方法。 […]
服务器端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的好时机。对于软件包维护者来说,这将是更新软件包的好时机。 […]
还可以学习叶子-一种可轻松生成视图的模板语言! 您可以在github上找到本教程的结果 本教程是如何设置Vapor 3项目的自然后续。 您可以先阅读该教程然后再回来,也可以跳过并继续阅读😊 指数 1.创建一个新项目 2.生成Xcode项目 3.配置您的项目以使用Leaf 4.创建您的第一个模板/视图 5.实施服务视图的路线 6.奖金:将数据传递到视图 7.从这里去哪里 1.创建一个新项目 蒸气工具箱非常好,让您可以使用任何git-repo作为模板轻松创建新项目。 由于我们将基于上述教程的结果,因此我们将使用它作为模板来创建一个新项目: 蒸气新项目名称–template = vaporberlin / my-first-route 注意:您可以通过在终端中输入vapor –help来查看蒸气工具箱的全部功能。 我们的命令将使用来自vaporberlin的 my-first-route作为模板创建一个名为projectName的项目(感谢vapor toolbox🤛🏻)。 2.生成Xcode项目 在生成Xcode项目之前,我们必须添加Leaf作为依赖项,并在Package.swift中更改包名称: // swift-tools-version:4.0 导入PackageDescriptionlet包=包( 名称:“ projectName”,//已更改 依赖项:[ .package(URL:“ https://github.com/vapor/vapor.git”,来自:“ 3.0.0”), .package(URL:“ https://github.com/vapor/leaf.git”,来自:“ 3.0.0”)//添加 ], 目标:[ .target(name:“ App”,依赖项:[“ Vapor”, “ Leaf” ]), .target(name:“ Run”,依赖项:[“ App”]), .testTarget(name:“ AppTests”,依赖项:[“ App”]), ] […]
这通常会提高自动化,代码生成和工具支持的水平。 它还会生成更稳定的代码。 开源社区 开源社区一直在努力使用Swift for Server构建库。 在撰写本文时,顶级服务器端Swift框架(在GitHub上按星标列出)是: 完美 (12271⭐) 蒸气 (11406⭐) Kitura ( 6019⭐ ) 泽沃 ( 1718⭐ ) Ryan Collins的这篇有用的文章测试了所有这些Framework的性能,并将它们与Node.js进行了比较。 他的结论是,所有这些框架的性能都非常好,并且在每次测试中,Node.js都被其中至少两个击败。 这意味着swift在发球方面表现非常出色。 汽 尽管每个框架都有其独特之处,但研讨会的主题是由纽约市的美国软件工程师Tanner Nelson(@ tanner0101)创建的Vapor 。 在2016年9月正式发布Vapor 1.0之后,团队一直在努力工作,当前可用的版本是Vapor 2.2.2。 他们已经在研究Vapor 3。 为什么要蒸气 ? 蒸气有许多优点: 巨大而活跃的社区 非常简单的语法 纯粹用Swift编写 易读易懂的API,不依赖第三方库 成为Swift可以使他们专注于保持API的简单性,可读性,并使其命名和其他约定与该语言保持一致。 唯一的缺点是:他们牺牲了一点速度和性能,以求成为纯Swift。 链接 https://github.com/vapor/vapor https://docs.vapor.codes/2.0/ http://vapor.university 在结束本文时,我同意Ryan Collins所说的话,即Server-Side Swift有望成为编程领域的一个有力竞争者。 谢谢你的时间! 希望本文对您有所帮助。 在Twitter上联系: stefanofrosoni
这是“蒸气入门”系列文章的第2部分 在本教程中,我们将利用在第1部分中学到的知识,并使用Vapor的模板系统Leaf创建一些网页。 首先,让我们讨论什么是Leaf。 Leaf是一个模板引擎,旨在使我们能够动态显示信息。 想象一下,您想创建一个HTML页面来显示特定于当前用户的信息,而您不必为每个用户创建新页面。 使用模板,我们可以在多种情况下重用我们的代码。 我们可以使用其他模板系统,例如Mustache和Stencil,但是由于Leaf是使用Swift构建的,因此在本教程中将使用它。 首先,让我们开始生成一个新的蒸气项目。 步骤1 —生成一个新的Vapor项目 打开您的终端并输入vapor new hellopages 。 第2步-生成 .xcodeproj 项目文件 在终端中输入cd hellopages && vapor xcode 。 这将把我们带入hellopage文件夹,并运行vapor命令生成项目文件。 我们一直想生成Xcode项目文件,因为这使我们能够访问Xcode的错误检查和代码完成,这使得使用Swift进行编码变得非常容易。 第3步-为我们的新网页创建一条新路线 首先,打开main.swift文件,并在第一条路线下方创建一条路线。 在第一条路线的正下方输入以下代码。 // 1 drop.get(“ hello”){要求 // 2 返回“ Hello World” } 这将创建对路由hello的GET请求。 如果运行此程序并使用浏览器导航到localhost:8080/hello我们将看到“ Hello World”。 要创建蒸气网页,我们需要更改对路线的响应。 将闭包的返回值更改为以下内容 返回尝试drop.view.make(“ hello”) 此行告诉Vapor查找名为hello.leaf的叶模板并将hello.leaf呈现给用户。 如果您想知道hello.leaf文件在哪里,我们还没有创建它。 您的main.swift文件现在应该看起来像这样。 第4步-创建问候页面。 要创建问候页面,我们将创建一个hello.leaf文件。 .leaf扩展名从上面的第12行中排除,因为Leaf是与Vapor一起使用的默认模板引擎。 模板文件必须放在“ Resources/Views文件夹中。 现在让我们创建文件。 […]
在上一篇文章中,我们使用Vapor 3完成了一个简单的RESTful API服务器。更具体地说,我们创建了User模型以将数据存储到内存中的SQLite数据库中,并实现了UsersController来处理来自客户端的交互。 尽管我们的服务器已经具有许多出色的功能,但是它也存在一个问题:任何人都可以创建新用户并将其删除。 换句话说,端点上没有身份验证以确保只有已知用户才能操纵数据库。 在本文中,我将演示如何存储密码和经过身份验证的用户,以及如何使用HTTP基本令牌和承载令牌认证来保护我们的端点。 请注意,本文将基于先前的实现。 一般来说,身份验证是验证某人身份的过程,一种常见的身份验证方法是使用用户名和密码。 打开我们的User.swift文件,并在var username: String下添加以下属性var username: String 。