• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

使用Vapor在Swift中构建出色的模拟服务器

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

迅捷,不只是移动了……

蒸气

什么是蒸气? ????

Vapor是一种用Swift编写的无阻塞,事件驱动的服务器架构,建立在Apple的SwiftNIO 框架 之上 它易于入门,拥有庞大且不断发展的社区,并且旨在提高性能和易用性。 很甜

在新的服务器端Swift框架中, Vapor并不孤单。 还有IBM的KituraPerfectZewo 这些都各有利弊,我毫不犹豫地说,目前在这个领域有明显的领先者。 将来我可能会更多地关注那些其他框架,但现在我将重点介绍Vapor

设定

这些天的易用性可能是为项目选择技术时的主要决定因素。 Vapor团队似乎已经意识到这一点,因为设置起来很容易。 他们甚至创办了Vapor University,将其作为精选的Vapor教程的资料库。

我的设置说明基于macOS,但您也可以在Ubuntu上继续学习

  1. 确保Xcode是最新的。 您可以在App Store中执行此操作。
  2. 检查您的快速版本(至少需要4.1.x)
    $ swift — version
  3. 如果尚未安装brew ,请安装
    $ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install )"
  4. 使用冲泡器安装蒸气
    $ brew tap vapor/homebrew-tap
    $ brew update
    $ brew install vapor
  5. 检查您的蒸气安装
    $ eval “$(curl -sL check.vapor.sh)”
  6. 为您的项目创建一个新目录。 我已命名我的工作服
    $ mkdir smock
  7. 移至新目录并创建一个新的蒸气项目。 我在这里通过了—-api标志,因为我们只关心为本教程构建后端服务器。
    $ cd smock
    $ vapor new smock --api
gif????

什么是模拟服务器?

在解释什么是模拟服务器之前,我们先介绍一下模拟服务器以及为什么要使用模拟服务器。 我还将避免深入研究模拟,存根和假冒之间的差异。 只是知道它们几乎都是一样的。 尽管有很多关于该主题的文章( 例如 ),但仍然很难达成专业人士之间的普遍共识。

通常,模拟和某种程度上的存根/伪造只是代码的一部分,您需要用它来代替测试。 我喜欢的区别是模拟本身并没有预定义的行为。

我将在此处共享的模拟服务器旨在充当被测应用程序的任何HTTP或HTTPS操作的替代者。

我认为拥有这样的服务器可以很好地在测试的组件或集成级别上工作,在测试中,您可能会拥有一个或多个不同的服务,而这些服务取决于您的代码,而这些服务在测试时并不实用。 尽管使用存根可以达到类似的结果,但使用模拟服务器将使您能够充分行使可能正在使用的所有HTTP客户端代码。

编码

方便地,当您像我们之前所做的那样创建新的蒸气API服务器时,蒸气会在新应用程序内创建一个简单的hello,worldtodo应用程序。 虽然我们最终将删除大部分代码,但是查看使用蒸气如何构造简单的MVC很有帮助。 由于此示例应用程序还遇到了引导SQLite数据库的麻烦,因此我们将继续使用它来存储模拟响应。 通常情况下,我只建议将它们作为字典存储在内存中,但是由于数据库已经连接好,我们也可以使用它。

模拟响应模型

MockResponse将是我们在模拟服务器中处理的主要对象类型。 该类将在SQLiteModel类上扩展,该类将使我们能够使用方便的内置方法来存储和检索记录。

MockResponse将包含多个属性,包括唯一ID,关联的路由,http方法,响应代码,自定义标头以及最后一个有效负载。

因为这意味着要成为通用的模拟服务器,所以它应该能够支持多种不同的有效负载格式。 Swift使用名为Codable的协议对JSON进行编码/解码。 不幸的是, Codable不支持动态字典结构,因此我转向了一个名为Codability的库,该库提供了一个名为AnyCodable的类,该类将允许任意字典结构符合Codable协议,而无需事先定义。

模拟控制器

MockController将充当我们应用程序中的控制器。 为简单起见,它缺乏更新现有模拟记录的能力,仅处理记录的创建,删除,列出,最重要的是检索和响应格式。

路由器

routes.swift处理蒸气应用程序中的路由并扩展蒸气路由器类。

router.swift包括用于模拟创建,列出和删除的静态路由,以及支持最终可能添加的任何模拟端点的动态路由。 为了完全支持任何URL路径,我需要依赖PathComponent.catchall ,或者仅依赖于“ all ”,因为它可以访问。 这与标准蒸气路由有一点区别,实际上是打算用作通用请求处理程序,这意味着某些常规路由支持范例不可用,例如参数处理。

我不建议将all参数用于任何类型的生产服务。 它只是使您自己面对潜在的可用性和安全性问题。

ResponseMapper

我最终写了一个新类来包含我的实用程序方法,因此不需要弄乱我的模型或控制器类。 这些ResponseMapper函数通常用于通过解密MockResponse对象上的AnyCodable有效负载属性并使用这些详细信息来生成正确的响应主体和标头来准备模拟响应。

运行服务器

您可以通过运行从命令行构建和运行蒸气应用程序。

$ vapor build && vapor run

您也可以在XCode中打开应用程序并在其中运行。

$ vapor xcode

外卖

蒸气3入门真的很容易。 虽然我还没有检查出它的竞争对手,但是如果您的目标是构建一个简单的MVC应用程序,那么我将为您提供帮助。

我在该项目期间遇到的唯一问题是找到准确的文档(自Vapor 2以来某些事情已经发生了变化,并且该文档似乎还不够完善),并了解了更多有关Swift的Codable协议并使用Codability使其符合规范的知识

总的来说,我会推荐Vapor,并希望在将来更多地使用它。

您可以在这里找到我的完整代码。

From: https://hackernoon.com/building-an-excellent-mock-server-in-swift-with-vapor-7e25aaa985e6


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift 函数式发布时间:2022-07-13
下一篇:
[Swift]LeetCode39.组合总和|CombinationSum发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap