Tag: 服务器端Swift

教程:如何建立一对多关系

在本教程的最后,您将了解如何实现并处理一对多和一对一的关系✨! 您可以在github上找到本教程的 结果 指数 1.创建并生成一个新项目 2.一对多/一对一/多对多 3.建筑模型:Pokemon(与用户有关) 4.调整模型:用户(定义与口袋妖怪的关系) 5.建筑控制器:PokemonController 6.调整控制器:UserController(删除相关的宠物小精灵) 7.调整视图:列出用户的所有宠物小精灵 8.调整视图:实现一个表单来创建新的口袋妖怪 9.从这里去哪里 1.创建并生成一个新项目 我们将使用上述教程的结果作为模板来创建我们的新项目: 蒸气新项目名称–template = vaporberlin / my-first-crud-using-leaf 在生成Xcode项目之前,我们必须在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-rc”), .package(网址:“ https://github.com/vapor/fluent-sqlite.git”,来自“ 3.0.0-rc”) ], 目标:[ .target(name:“ App”,依赖项:[“ Vapor”,“ Leaf”,“ FluentSQLite”]), .target(name:“ Run”,依赖项:[“ App”]), .testTarget(name:“ AppTests”,依赖项:[“ App”]), ] ) 现在在终端的根目录projectName /上执行: 蒸气更新-y […]

具有Kitura编码路由的服务器端Swift CRUD API

Kitura是IBM创建的服务器端Swift Web框架。 它已获得MIT许可,免费使用,并且源代码是开放源代码。 最近,随着2.0版本的发布,Kitura团队引入了新的Codable Routes功能,这使开发人员可以非常轻松地使用Swift 4 Codable自动处理URL请求和响应。 Swift 4引入了Codable协议,这意味着实现Codable协议的类型能够将其属性解码和编码为任何外部表示形式,例如JSON。 在语言级别上,许多原始数据类型(例如Int,String,Double,Data,URL)已经是Codable类型,包含Codable类型的Array和Dictionary也已经是Codable类型。 struct TodoItem:可编码{ var id:字符串 var标题:字符串 var内容:字符串 } //将TodoItem结构编码为JSON数据 让todoItem = TodoItem(id:“ 1”,标题:“ hello”,内容:“ world”) 让jsonData =试试! JSONEncoder.encode(todoItem)//将JSON数据解码为TodoItem结构 让todoItem2 =试试! JSONDecoder.decode(TodoItem.self,来自:jsonData) 使用内置的JSONEncoder和JSONDecoder类的Swift,从JSON编码和解码可编码对象,反之亦然。 使用Codable,我们不必手动解析JSON或使用第三方库(如SwiftyJSON)进行解析。 可编码的工作就像魔术一样。 使用Kitura Codable Routes,我们可以创建一个Router终结点方法,该方法接受请求的Codable对象,并将完成闭合传递给该Codable对象作为响应。 作为开发人员,我们不再需要手动编写编码和解码逻辑。 要查看所有这些操作,让我们使用内存数据存储区为TodoItem构建一个CRUD API。 进口Kitura 导入KituraContractsstruct TodoItem:可编码{ var id:字符串 var标题:字符串 var detail:字符串 } var todos = [ TodoItem(id:“ 1”,标题:“清理房子”,详细信息:“我的房子”), TodoItem(id:“ […]

Dyno版本:AWS,Swifter

上一次,我们做了很多设置以开始使用Amazon Web Services的DynamoDB ,包括使用Swift-Python桥,以便我们可以使用官方的AWS接口boto3与DynamoDB进行通信。 但是boto3除了基于Python并因此没有Swift类型安全性之外,还具有一些局限性:它很复杂,难以使用—并且存在同步的主要问题。 要查看该问题,请运行上次到达的代码: …现在,请尝试关闭计算机的WiFi ,然后重新运行。 怎么了? table.scan()行仅挂起那里30秒钟,直到出现令人讨厌的异常并且程序崩溃(带有不可恢复的致命错误)。 实际上,这不是我们希望库调用或可能具有间歇性网络连接的应用程序(例如移动应用程序¹)所期望的行为。 本文-更好的boto Dyno库旨在做得更好。在本文中,我们将介绍如何做! 和以前一样,尽管这个想法是产生一个有用的库,但我也希望展示可以在自己的代码中使用的技术。 我们将使boto3调用异步。 这将演示信号量,工作队列和工作项的使用 Dyno将利用新的Swift 5 Result类型发布一个Observable结果流。 在这里,我们将演示带有复杂数据流的Observable和Reactive编程 我们将添加一些有用的,类型安全的方法来从DynamoDb(原生于Swift)读取和写入数据。 这说明了 我们数据类型上的 一些出色的功能构造,例如 zip 和 flatMap 在本文的最后,我们将直接从Swift将Dinosaurs(当然是🦕和))写到DynamoDB数据库中,然后以异步方式读回它们,并适当考虑网络延迟。 这将成为我们Dyno库的开始。 和以前一样,该库正在公开开发中,因此您可以在github( swiftify分支)上查看源代码。 有很多事情要做,让我们开始吧! 可观察的流 正如我在上一篇文章中提到的,可观察对象是表示数据流的一种方式。 我们可以将它们连接到Reactive组件,以便能够以功能强大和声明性的方式处理数据流。 这是表示数据操作的一种非常强大的方法-我们将在以后的文章中介绍,但是现在我们将看看如何将DynamoDB交互表示为Observable。 建模数据交互的关键是要注意它们都看起来像这样: 要求DynamoDB做某事(扫描表,更新行等) 等待结果(返回200行,更新成功)… 或出现错误,例如 超时或数据完整性错误。 我们使用DynoActivity数据类型的可观察流对这些阶段进行DynoActivity : 它就像一串可观察的事物(橙色和红色的大理石代表可观察的事件)看起来像这样: 现在,我们要做的一件事是假设即使一次大型查询(例如,返回了数百行),我们也一次性获得了所有数据:我们不对输出进行“分页”。 我们将来可能会改变它²。 您可能还会注意到,我们希望我们的可观察流以多线程的方式异步工作:我们可以让多个流同时运行,有的读取数据,有的写入。 为什么我们不将Future用于这种类型的异步数据请求/响应? 使用Observable流可以非常轻松地处理诸如“显示等待图标,直到返回数据或显示错误”之类的交互模式。 对于实际应用而言,这是非常基本的。 现实检查 在创建高级Observable之前,我们需要处理以下事实:通过不可靠的连接与远程数据库进行同步接口,并使用Python接口进行引导。 具体来说,我们需要确保Dyno正在控制AWS连接上的活动,而不是将其留给Boto3的30秒同步,程序终止超时。 那么,如何在不自行控制Boto3代码的情况下使Boto3异步和多线程呢? 我们将使用DispatchSemaphores […]

SwiftNIO入门

您可能在不久前听说过有关SwiftNIO的谣言(发音为Swift Neo,就像Matrix的家伙一样;-)。 当我第一次阅读它时,我感到非常兴奋,想查看一下它,看看它与Java中的Netty有何不同。 到目前为止,如果您熟悉Netty,则应该对SwiftNIO感到宾至如归。 如果不是,请继续阅读。 为什么选择服务器端Swift? 为什么不? 如果您已经是iOS开发人员并且喜欢编写Swift,为什么不尝试在Swift中构建后端? 与Java,C#,Ruby,Go和Node等其他语言相比,Swift几乎没有相同数量的软件包可供您在后端重用。 但是,所有这些社区都必须从某个地方开始。 如果您在后端查看诸如Go和Javascript之类的新语言,那么像您这样的人会对这种语言感兴趣并解决了有助于推动社区前进的问题。 为什么选择SwiftNIO? 已经有一些很棒的服务器端Swift框架,例如Vapor,Kitura和Perfect,您可以开始构建Web应用程序。 实际上,Vapor将SwiftNIO用于其网络层。 我想做的是向您介绍一些较低层次的基础知识,以更好地理解较高层次的抽象。 在本文中,我们将介绍SwiftNIO。 从他们的Github页面上获取: SwiftNIO是跨平台的异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。 它就像Netty,但是为Swift编写的。 SwiftNIO架构 首先,让我们简要介绍一下SwiftNIO的组件。 Channel是负责处理入站和出站事件的构造。 它连接到基础网络套接字。 Channel具有ChannelPipeline ,它是ChannelHandler对象的双链接列表。 ChannelHandlers通常包含您的应用程序逻辑。 当发生网络事件并按顺序处理时,将触发ChannelHandler方法。 本质上, ChannelPipeline是数据处理事件的管道。 入门 本教程适用于Mac,但是适用于Linux的步骤应该非常相似。 由于我们在服务器上,因此我们将使用Swift Package Manager(SPM)。 有两个部分: 创建一个TCP客户端 创建一个TCP服务器 第1部分:创建客户端 我们将运行一些命令来创建我们的项目结构并生成我们的Xcode项目。 打开您的终端并运行以下命令: $ mkdir TCPClient $ cd TCPClient $ swift软件包init –type可执行文件 $ swift包generate-xcodeproj $打开TCPClient.xcodeproj / 这是什么: 为您的项目创建一个名为TCPClient的新目录 […]

蒸气3 Udemy课程!!

我真的很高兴宣布发布我的新课程“ 使用蒸气3掌握服务器端Swift ”。 Swift是在WWDC 2014上宣布的,它席卷了整个世界。 除了编写iOS,Mac,Apple Watch和Apple TV应用程序外,您还可以使用Swift语言编写完整的后端。 在本课程中,您将学习如何使用Vapor 3框架将现有的Swift技能带到云中。 您只需9.99美元即可获得完整的课程。 让我们检查一下课程内容: 了解路线 在本节中,您将学习有关路线的所有信息。 这包括将参数传递到路由以及查询字符串。 我还将解释如何使用分组和嵌套路由来清晰地构建路由。 JSON格式 Vapor 3使获取和发布JSON值变得非常容易。 在本节中,您将学习如何使用Vapor框架中定义的帮助程序协议将自定义类转换为JSON表示形式。 期货 蒸气3与蒸气1和蒸气2框架完全不同。 在本节中,您将学习期货。 期货允许执行异步响应,从而使您的服务器可以立即返回响应。 SQL Fluent提供程序 在本部分中,您将学习如何将Vapor 3应用程序与SQLite3数据库集成。 我正在演示如何使用SQL Fluent Provider从数据库中获取数据。 从数据库返回的数据/记录将作为JSON响应发送给用户。 控制器 在本节中,您将学习如何通过实现Controller更好地组织代码。 控制器充当视图和模型之间的中间人。 开发大型应用程序时,控制器变得至关重要。 将Vapor Web API与iPhone应用程序集成 在本部分中,您将把Web API与iPhone应用程序集成。 这将包括通过iPhone应用程序创建新记录,获取记录,过滤和删除记录。 我真的希望您喜欢这门课程! 我已经开始研究本课程的未来更新。 非常感谢您的评分和评价。 谢谢,喜欢这个课程, Azam

服务器端Swift中带有Codables的类型化路由-完美

Swift 4中Codables的引入使我们的生活更加轻松😊,我们不再需要使用解析和映射库或编写冗长的代码来提取/生成JSON等数据结构。 完美的框架适应了Codables,因此我们可以创建类型化的路由,以便在Server Side Swift中轻松解码和编码请求和响应。 让我们从创建一个返回服务器主路由的函数开始。 启动服务器时,只需调用此函数即可设置服务器的路由。 众所周知,从上面可以看到,定义路由的方法有很多,这里我将解释四种不同的方法: 异步路由(未输入!) 同步输入的路线 将类型化的路由与自定义HTTPResponse内容同步 具有自定义HTTPResponse内容和Promise的异步类型的路由 有更多的方法来定义路线,但是研究这些类别将使您对如何混合和匹配不同的方法有一个很好的了解。 添加了选件路线以支持SPA飞行前呼叫 异步路由(未输入!) 尽管这些类型的路由是灵活且异步的,但它们不是安全类型! 😬 此处理程序的路由定义为: routes.add(method: .get, uri: “/api/v1/user/logout”, handler: logout) 假设我们需要从请求中提取数据,我们需要首先提取postBodyString,然后将其解码为我们的模式,如下所示: 另外,在这种情况下,我们可以在响应正文中以JSON形式返回任何内容,并且由于处理程序函数不返回任何内容,因此尚不清楚此API将返回什么。 使用Codables,我们可以减少冗长和输入安全! 同步类型路由 当我们不需要调用任何异步方法(例如,使用PerfectCURL调用其他API)但我们正在寻找类型安全性时,这些类型的路由很有用! 😊 此处理程序的路由定义为: routes.add(TRoute(method: .get, uri: “/healthcheck”, handler: healthCheck)) 查看方法的签名,我们可以轻松地找到已经可编码的返回类型,而无需从中生成JSON! 具有自定义HTTPResponse内容的同步类型路由 这些类型的路由类似于上一类,但是从某种意义上说,它们在我们可以操纵响应内容(例如标头,http状态等)方面更加灵活。 此处理程序的路由定义为: routes.add(TRoute(method: .get, uri: “/api/v1/user/session”, handler: session)) 具有自定义HTTPResponse内容和承诺的异步类型的路由 在大多数情况下,我们创建的API比返回JSON更为复杂。 例如,当我们实现登录API时,我们需要针对数据库检查用户名和密码,或者我们可以异步调用其他一些API。 使用HTTPResponse Content and Promises满足异步类型的路由 。 […]

汽。 Swift服务器端。 第1部分。

让我们考虑一下这种情况: –我们是一位iOS开发人员,希望创建一个应用程序。 如果我们想在服务器端使用出色的应用程序,则必须连接一个后端开发人员来为我们提供帮助。 –或者我们是一家年轻的成长中的公司,希望创建MVP iOS产品并向我们的投资者展示。 同样,我们必须有后端开发人员。 如果我们尝试在没有后端开发人员的情况下创建服务器端怎么办? 欢迎蒸气框架! 入门 冲泡安装蒸气/抽头/蒸气 2. 你好世界 打开您的终端,并使用命令。 蒸气新你好 完成后,转到新创建的目录。 cd你好 生成Xcode项目 现在让我们使用命令生成Xcode项目。 蒸气Xcode 生成并运行 现在,您应该已打开Xcode并运行它。 从方案菜单中选择运行方案,并以My Mac作为部署目标,然后单击播放按钮。 您应该看到终端在屏幕底部弹出。 服务器从http:// localhost:8080启动 造访Localhost 打开您的Web浏览器,然后访问localhost:8080 / hello 您应该看到以下页面。 你好,世界! 祝贺您创建,构建和运行您的第一个Vapor应用程序!

实用标记—服务器端Swift研讨会

这通常会提高自动化,代码生成和工具支持的水平。 它还会生成更稳定的代码。 开源社区 开源社区一直在努力使用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

蒸气—后端的快捷选择

我决定深入研究Vapor,以及它是否真的是可行的选择。 早在2月份,我播了一段播客,概述了开发移动应用程序时不同的后端选项。 简而言之,当寻找正确的选项时,有很多选择。 例如,对于Swift开发人员而言,Vapor已成为越来越合适的选择。 因此,我决定深入研究Vapor,以及它是否真的是可行的选择。 选择的多样性 纵观后端选择的前景,可能会造成混乱。 最后, 这实际上取决于团队的技能水平 。 例如,如果您使用JavaScript来构建Web和移动应用程序,那么Node.JS就很有意义。 另一方面,如果您是.Net开发人员团队,则Web API很有意义。 此外,如果您特别精​​通PHP,Python,Ruby,Go等…,则应保持自己的舒适度。 但是,对于专注于Apple产品的单个开发人员和开发人员团队(例如我),没有专用于服务器端应用程序的框架。 因此,最接近的选项是CloudKit,它适合于数据存储,但缺少以下选项: Web和Apple设备外不支持 不支持完整备份 锁定到CloudKit数据模型中以建立关系 没有Cron工作 但是,还有其他选项可以在服务器上的Swift中继续开发。 蒸气—服务器快速处理 自Swift于2015年末开源以来,已添加了与其他操作系统的兼容性。 将Swift迁移到服务器的第一批团队之一是Vapor团队。 自2018年5月发布3.0版以来,人们的兴趣日益浓厚。 在本文中,我将回顾Vapor并介绍以下内容: 易于安装和部署 蒸气开发 数据库支持 事件驱动的异步API 因此,让我们从开始变得容易开始。 蒸气入门 在我最近发表的这篇文章中,我展示了如何在Mac和Ubuntu以及Heroku之类的服务上安装Vapor。 简而言之, 我发现该过程非常简单有效 。 也就是说,它没有其他任何Web框架那么复杂。 例如,在Mac上,开发人员可以使用相当普遍的Homebrew来点击Vapor存储库并进行安装。 有权使用Vapor CLI工具后,该工具包括一个子命令,用于使用Vapor buildpack设置Heroku应用程序。 同样在Ubuntu上,您为Vapor添加apt仓库,并通过apt命令安装。 完成此操作后,您可以轻松地使用进程监视器和http服务器的组合来代理服务器。 如果您对此过程的更多细节感兴趣, 请查看这篇文章,深入了解Vapor并设置macOS,Heroku和Ubuntu。 蒸气开发 安装了Vapor之后,该过程的下一部分将开发该应用程序。 因此,IDE非常重要。 带有蒸气的开发人员工具 尽管存在问题,我们仍然可以使用Xcode在Swift中进行开发。 但是,由于有用于构建Swift应用程序的命令行工具,开发人员可以选择自己的工具。 目前,真正的限制是Swift通常仅在macOS和Ubuntu上受支持。 也就是说, 不支持其他Linux或Unix操作系统,也不支持Windows。 但是,社区肯定会在这些领域提供更多支持来向前发展。 […]

在蒸气上具有Swift的REST API

今天是个好日子! 最近,我需要一个服务器端存储,其中包含针对JSON数据文件的某种发现服务。 所以我把自己拆开了: 作为服务器端工程师,我的一部分正在努力将文件与另外一个JSON文件存储在Amazon S3上,以作为可用数据的发现信息。 作为iOS上的客户端工程师,我的另一部分是渴望在Swift中找到一些Web服务器框架并使用它。 经过一番与自己的斗争,由于以下事实,我决定提出这个职位: 最近,我主要忙于在Swift中开发iOS应用。 实际上,我非常渴望看到与更传统的服务器技术(例如Java,JavaScript等)相比,服务器上的Swift有何不同。 在本文中,我将实现一个简单的REST API Web服务器,该服务器能够提供由唯一ID标识的JSON数据,在本例中,一部分数据将表示为从Adobe After Effects(AAE)导出为JSON的动画。 (读为“某些JSON对象”)。 所以,让我们开始吧! 制备 在快速阅读了这篇有关大多数流行的基于Swift的Web框架(如Kitura,Perfect和Vapor)的有趣文章之后,由于它的快速开发特性(即Ruby on Rails和周围的活跃社区),我决定选择后者。 不过请注意-我并不是说这是最佳选择。 因此,让我们创建一个空的Vapor项目。 首先,我们需要遵循此准则安装Vapor框架及其命令行工具。 安装完Vapor之后,创建新项目非常简单,只需在Terminal中运行以下命令即可: $ vapor new AnimationsProviderServer 生成Xcode项目以简化我们服务器的开发也很有用: $ vapor xcode 至此,我们应该准备好打开甚至运行Xcode项目! 该服务器将在默认的8080端口上可用,因此您可以在浏览器中打开“ http:// localhost:8080” URL并检查其是否有效。 简短说明 :在撰写本文时,Vapor不支持开箱即用的“热重装”功能,但是可以通过NPMJS上可用的gulp-vapor软件包进行设置。 瞧,现在让我们编码一下! 资料模型 现在是时候向服务器添加一些逻辑了。 让我们创建一个模型实体来保存有关动画的信息,现在,表示动画所需的一切就是从Adobe After Effects(AAE)导出其标识符和JSON数据。 因此,动画模型可能如下所示: 注意:确保将导入的JSON文件添加到“ App”目标中。 数据存储 我们需要某种方式访问​​导入的动画资源,以实现可能想要实现某种存储实体的方式,我们将其称为AnimationsStorage: 为了使AnimationsStorage服务在Vapor控制器中可用,我们应该在configure.swift文件中注册它: 基本上,将configure.swift文件视为有关所有可用全局服务,实用程序等的信息源。 REST API 接下来,让我们创建一个简单的控制器,该控制器通过HTTP […]