在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
当可用于生产服务器的 Swift 后台软件框架体系进入我的视野时,如何选择哪一种品牌来开始新项目是一个困难的问题。根据我个人的研究和经验,以下是时下最热门的软件体系的介绍和对比。 首先重要的事情说三遍:在决定最终选择之前,最好您亲自尝试所有的框架。我以前曾经做过上面的各个软件评测报告,但是真的不能仅仅依靠运行速度或者其他唯一指标来决定一切,最好都尝试一下。 目前最流行的服务器端 Swift 软件函数库/服务器包括了 Vapor、Perfect、Kitura 和 Zewo。它们各自互不相同,我尝试了一圈然后来写这篇文章与您分享。我按照其支持的功能多少决定了论述的顺序,从功能最少到功能最多列出。 本文撰写时间为 2017 年 3 月,因此您在阅读时请注意这个时效性(因为每个厂家都在努力进步)。 从 Zewo 开始Zewo 受 Go 语言启发,采用了 Go 类型的并发(concurrency)因此避免了回调函数,采用麻省理工开源许可证,据我所知,该品牌为 GitHub 上一些独立程序员共同维护。 Zewo 目前的性能速度已经足够快,并包括了运行一个服务器所需要的所有基本功能特征,包括 HTTP 服务器请求/响应,URL 路由,TLS(SSL)传输认证加密,页面基本模板(Mustache),结构化数据(JSON/XML),还允许使用中间层(过滤器)。 Zewo 支持 Tunstile 认证函数库,因此能够实现用户登录和会话管理。另外还原生支持 JSON Web Tokens。Zewo 提供的数据库驱动包括 MySQL、PostgreSQL、Redis 和 RethinkDB,以及一个使用 Postgre 的数据库对象自动化管理(ORM)函数库。 在部署方面,Zewo 具有 Docker 镜像并支持所有 Swift 原生平台(macOS 或 Ubuntu 14/16)。 在使用说明方面,Zewo 有一个基本的项目范例,开发时必须执行的步骤,以及 PostgresSQL 的驱动使用指南。除此之外,范例中还包括了 websockets 和 graphQL。目前 Zewo 的文档仅限于项目快速上手。
下一个:KituraKitura 是由蓝色巨人 IBM 在 2014 年与苹果公司宣布企业合作时启动的项目之一,采用 Apache 2.0 许可证。 与 Zewo 的 Swift 后台基本功能一致,Kitura 同样包含了这些标准功能,不过还包括了一些高级的特征。不过有一个显著的差别,就是 Kitura 只支持 JSON 作为唯一的原生结构化数据支持。如果您需要在 Kitura 为基础的项目上使用 XML,那么很抱歉您不得不另找门路。Kitura 还支持 Aphid MqTT(物联网 IoT 消息队列服务)。 在用户认证方面,Kitura 依赖于 Kitura-Credentials 加密工具。另外,Kitura 还预装 CORS/CSRF(网站交叉访问)中间层(用于过滤欺诈访问),还包括了比较热门的第三方登录工具,比如谷歌、脸谱和 GitHub 登录。但 Kitura 尚未实现对 JSON Web Tokens 的原生支持。 数据库方面 Kitura 是比较特殊的。对于传统关系型数据库,Kitura 采用了一个 SQL 数据库抽象层 Kuery(发音同 Query 查询)用于消除各种 SQL 数据实现的语法差异。通过 Kuery,可以直接调用 MySQL、SQLite 和 PostgreSQL。Kuery 不是一个完整的 ORM 数据库对象自动化管理实现,但是使用抽象层确实比直接调用 SQL 语句会更 Swifty(双关语:方便并且更贴近 Swift 品牌理念——译者注)一些。Kitura 还包括对诸如 Redis、CouchDB、Apache Cassandra 和 ScyllaDB 的支持,但是这些原生支持非关系型数据库并没有融合到 Kuery 抽象层去。 在页面模板方面,Kitura 不但支持 Mustache,还支持 Markdown 和 Stencil。此外 Kitura 还支持 FastCGI,允许从 Apache 进行流挂接。更深入一些可以发现,Kitura 还原生支持 Watson API(包括气象分析数据),而且还有一个比较好用的 HTML5 对象实体函数库。 Kitura 的部署当然是支持 macOS 和 Ubuntu 14/16,但是与其他 Swift 后台软件相比,IBM 提供在 Bluemix 云上对 Swift 的 macOS 应用原生集成。如果您已经使用 Bluemix 云建网,那么 Kitura 有很明显的优势。 在文档支持方面,Kitura 的在线资源还是很丰富的。其官方网站有一个做的很好的启动指南,并且所有的函数都有非常好的编程手册、结构清晰的教学文档以及在编译程序、测试和部署的辅助参考。
压轴 Vapor一旦接触 Vapor 您很快就会了解的两件事情:他们有最大最活跃的开发社区,而且 Vapor 的使用语法非常简单。Vapor 是所有 Swift 后台软件中完全使用 Swift 开发出来的软件。Vapor 的所有权是一个初创公司 Qutheory 有限公司,该软件使用麻省理工开源许可证。 由于完全使用 Swift,Vapor 因此从一开始就有些不同。首先,Vapor 为了实现“纯 Swift”开发而牺牲了一些速度(注意速度不是唯一的也不是最重要的指标,这也是为什么我要写这篇文章的部分原因)。其次,Vapor 也因为纯粹的 Swift 语法而使其源代码获得很好的易读性,并且不依赖于许多第三方软件,比如其他软件可能使用的是 Node.js 的 HTTP 语法分析器,但是 Vapor 开发了其原生的 Swift 版本的 HTTP 解析器。这也是的其函数库能够以 Swift 语言的方式保持命名规范和易读性。就像 Zewo 热衷与 Go 风格的并发函数库一样,Vapor 对于完全用 Swift 编写所有代码这件事情上也非常自豪。 Vapor 有一组非常好的核心功能,包括他们自己开发的功能;但在基本功能中比较显著的是与 Kitura 和 Zewo 相比,Vapor 缺乏对 XML、CSRF 反欺诈网站交叉访问中间层和 FastCGI 的支持。当然,Vapor 也开发了很多 Kitura 和 Zewo 没有的功能,比如支持苹果的消息推送服务 APNS,以及用 SMTP 发送邮件等,这两个函数库都很好用。 Vapor 的数据库功能是比较完整的,不但包括对 MySQL、Sqlite 和 PostgreSQL 的支持,还支持 Redis 和 MongoDB。此外,Vapor 支持 SQLite / MySQL、PostgreSQL、MongoDB 的数据库对象关系自动化管理(ORM),名称为 Fluent。因为完全采用 Swift 接口,Fluent 的驱动是协议导向的,因此很容易在此基础之上追加任何数据库驱动。 服务器 Swift 应用中比较流行的 Turnstile 用户身份验证框架已经集成到了 Vapor 之中,可以直接使用,不需要增加额外的依存关系。Vapor 还包括了一个完整的加密函数库并提供原生支持。其他的原生函数库包括用户认证、会话管理、预装的数据库关系对象自动化管理 ORM 系统(Fluent)以及 CORS(请求来源变化控制)中间层。 由于有庞大而活跃的社区支持,其开发进展非常可观。自 2016 年 9 月官方发布 Vapor 1.0 以来,该团队一直在努力;近期在公测 Vapor 2.0 的 alpha 版本,常常能看到每天有数次更新。 Vapor 有一些独特的功能。首先除了 Mustache 和 Markdown 脚本之外,Vapor 还有自己独立的模板引擎,名为 Leaf(叶子)。由于采用 Swift 开发并直接集成到 Vapor 引擎,该脚本系统能够在 Vapor 服务器上很好地处理请求和响应。另外 Vapor 的路由验证系统也很独特,能够控制路由在传递参数时控制参数类型,比如整型 Int。另外一个特点是使用 SwiftyBeaver 日志系统,并提供一系列用于创建和操控项目的命令行,这些命令能够直接在终端命令行中使用,或者通过其自带的 homebrew 进行操作。Vapor 还提供了一系列 Swift 开发的命令行工具,包括进度指示器等等。Vapor 本身的命令行工具也非常有特点,您可以通过扩展其终端协议来处理您程序中自己的命令行参数。 在部署方面,当然和其他所有 Swift 后台软件一样,可以原生支持 macOS 和 Ubuntu 14/16,还包括了 Docker 的镜像,以及其 Toolbox 命令行辅助工具,用于在 Heroku 或 Docker 上运行。 文档方面 Vapor 的资源非常丰富,组织的很好,使用很方便,但是还不太完善(比如如果您需要查看 MySQL 的详细函数,则需要查看源代码)。Vapor 还有一个非常独特的优点是他们有自己的在线教学视频网站——Vapor 大学:http://vapor.university。该网站上包括了很多的 Vapor 教学及演示集锦,以及从热门 IT 教学网站 Ray Wenderlich 上发布的 Vapor 课程。Vapor 的 GitHub 上包括了很多示范项目,比如 Leaf 模板、SQLite、认证、开发步骤、Vapor 在线大学的网站源码、在线聊天源码、Fluent 数据库关系自动化管理系统 ORM、网站仪表盘 Dashboard、Pokedex(如果你喜欢抓皮卡丘小怪物)和一个 Slack 聊天机器人(就在本文发表的当天,Perfect 也推出了自己的 SlackBot 聊天机器人,位于 GitHub/PerfectServers 目录下——译者注)。Vapor 甚至提供了一个最基本的中文文档。
最后的大轴 PerfectPerfect 是功能绝对强大、速度绝对够快的 Swift 服务器软件体系。Perfect 有加拿大软件公司 PerfectlySoft 运营,获得了种子基金支持并在其母公司内孵化。而且值得一提的是 Perfect 的历史——其团队核心成员与苹果公司有很深的渊源——之前是 Lasso 计算机语言的核心成员——苹果公司早期的软件产品线 Lasso。该团队开发服务器软件有很多年历史,随后才战略转移到了 Swift 语言。Perfect 采用 Apache 2.0 许可证。 首先 Perfect 的显著特点之一就是包含了大量的源代码库。因为数量太多,所以 Perfect 将 GitHub 上将源代码划分为以下几个分支团队:
这可能是因为如果采用别的方式代码会比较难于管理,也的确是因为 Perfect 的功能过于丰富、参考示范代码也太多,所以不得不分开管理。 Perfect 包括了您所期待的所有基本功能,包括路由、websockets 基于 HTTP 的网络套接字、TLS(SSL)通信加密、Mustache 模板和 Markdown 模板、JSON 结构化数据等等,以及全部其他所有 Swift 后台框架加在一起才有的 XML 结构化数据、苹果推送消息 APNS、MqTT 消息队列和 SMTP 邮件发送。实际上很难发现 Perfect 缺乏什么功能,可能唯一缺乏的就是路由参数类型验证机制。除非刻意去找茬,否则很难需要 Perfect 去配合 IBM 的服务或者采用 Vapor 自创的 Leaf 模板。Perfect 没有任何附加的命令行工具,不过 Perfect 有自己独特的原生 Mac 图形界面应用程序。 Perfect 的社区同 Vapor 一样庞大而活跃,在所有 Swift 后台框架中 Slack 用户人数排第二名,仅次于 Vapor(人数比 Vapor 稍微少一点)但是发展膨胀速度一样很快。 Perfect 的数据库支持非常广泛,其原生 SQL 驱动包括 MySQL、SQLite、PostgreSQL 和 MariaDB,还支持 MongoDB、Redis、CouchDB 甚至还包括 FileMaker(苹果自己的数据库 Swift 都不支持,Perfect 反过来支持——译者注)。Perfect 据说还部分支持微软的 ODBC,即多种数据库的底层兼容界面——有点像 ORM,但是以 C 函数库为基础。提到 ORM 数据库对象关系自动化管理,Perfect 有 StORM 并完整实现了 PostgreSQL、MySQL、CouchDB 和 SQLite。 首先在安全和用户认证上 Perfect 采用 Turnstile。这是一个流行广泛的第三方开源框架,源自 Stormpath,可以在 GitHub 上找到。Perfect 实现了 Turnstile 版本扩展、预装了不同的数据库集成来实现用户身份的验证机制。与 Vapor 一样,Perfect 拥有自己的加密函数库,还包括了 SPNEGO/Kerberos、LDAP 轻量活动目录和微软 Active Directory 活动目录支持。Perfect 具备原生的 OAuth2 函数库,预装了很多流行的第三方登录机制,比如脸谱、谷歌、GitHub、领英和 Slack 等等。比较出名的是 Perfect 能够支持基本 HTTP 认证方法。Perfect 还能够提供会话管理,最后,Perfect 还提供如 CORS 和 CSRF 这样的反网站欺诈中间层。 Perfect 具备一些非常独特的功能,而这些功能在其他地方是找不到的。Perfect 团队为此付出了巨大的努力而且结果值得称道。其中之一就是采用原生的 cURL 类函数库封装,使得 Perfect 用户能够直接使用 libcurl。在文件管理方面 Perfect 有非常稳健的文件管理类包(创建、读取、写入和删除)、目录管理(创建、列表和删除)以及 zip(压缩和解压缩)。Perfect 也是唯一提供 MariaDB、ODBC 甚至 FileMaker 的 Swift 后台软件框架体系。 此外,Perfect 还非常独特的封装了 OAuth2 过程,而且在所有 Swift 服务器软件中,Perfect 是唯一将所有文档完整翻译成中文的软件框架、并且所有主要的源代码库的 README 引导页也都翻译成了中文。除此之外,Perfect 还是唯一预装了快速部署的服务器,以及二进制结构化数据 BSON 实现、以及唯一支持 SPNEGO/Kerberos、LDAP 轻量活动目录和微软 Active Directory 活动目录组件,甚至支持大数据(GridFS/Hadoop)的真正的服务器框架体系。 Perfect 还开发了一个原生的 Mac 图形界面应用程序,称为 Perfect Assistant 软件助手,不单单能够使用 Perfect,而且能够加入所有基于 Swift Package Manager 软件包管理器的项目。该助手是直接集成 Docker 并且能够进行 Linux 测试、亚马逊弹性计算云/谷歌云自动化部署。用户可以直接使用该助手启动空白项目,或者从项目模板中新建服务器应用。该助手还提供在本地计算机上一键编译双平台(mac 和 Linux)、清理项目、编译转化为 Xcode 项目(使得项目可以在 Xcode 内调用 linux 脚本交叉编译,太方便了)、运行测试以及更多操作。软件助手还能够进行项目依存关系管理、所有的 SPM 软件包管理操作都可以用鼠标拖拽完成。所有预装的组件都是 Perfect 或者高度集成 Perfect 的,但是您也可以自定义加入新的组件。 Perfect 除了其为 Mac 用户量身定做的助手应用程序之外,还与一个名为 SCADE 的专用 IDE 集成开发环境实现了内部集成。使用 SCADE,不但可以直接编写 Swift 的 mac 和 linux 应用,更犀利的事,该 IDE 还能够同时为 iOS 和安卓开发手机原生应用。SCADE 通过其自行开发的 SDK 实现了从前端到后段的跨多种平台全栈开发。对于好奇心比较强的用户而言,目前 SCADE 处于私有 beta 版本测试状态,而且可以试用的唯一方法就是加入 Perfect 的 Slack 频道 #swift-android-ios。 Perfect 还支持多种部署方式,当然与其他软件框架一样支持 Swift 在 macOS 和 Ubuntu 14/16 上的开发。同时 Perfect 还有 Docker 镜像,也支持 FastCGI 的 Apache 集成,或者 Heroku 编译包。通过使用 Perfect 软件助手,还能够实现亚马逊弹性计算云或者谷歌云的一键部署,如前文所属。与其他复杂的部署选项相比,Perfect 还具有一个非常独特的预装源程序,比如 SwiftSlack,一个用 Swift 语言编写的 Slack 接入网站,允许邀请新用户加入您自己的 Slack 群。 Perfect 同样不缺乏培训资源。如前文介绍,Perfect 旗下包括了 GitHub 上的一个团队仓库,集中了两个网页的各种样本项目范例,主题非常丰富。Perfect 有一整套入门文档和 API 函数接口参考手册。如果您说中文,那么恭喜您,所有的指南都已经翻译成中文,而且大多数 Perfect 源代码仓库封面都有中文翻译。如果您需要****,那么公开的内容也非常多,包括 Perfect 团队自己发布的剪辑、Ray Wenderlich 在线教程,以及我自己也有一些****。同样相关的文章也不少。与其他的 Swift 后台软件一样,Perfect 有一个非常完整的入门指南。
总结尽管所有的上述四个 Swift 服务器软件框架体系都希望做同一件事情,但是它们之间在能力和提供的资源上差别还是很大的,互相之间都很独一无二。请根据您自身对待开发项目的要求进行选择,比如您有什么偏好,对性能是否有要求等等。我建议您在作出最终选择之前对每种软件都评测尝试一下。 对于哪些还没有开发出来的功能来说,一旦开发出来肯定会特别有用,比如双效验证、带权限的安全认证体系或者服务器运行指标库、自建 CSV 表格文件支持等等。如果您希望贡献代码,那么欢迎您加入各个开发社区。(原文此处提供了一些作者及其朋友圈提供的 Swift 函数库,不过因为多数都有不兼容 Swift 3.1 的问题,因此在本译文中不单独介绍,详情请参考原文) 我相信 Swift 的服务器开发前途一片光明。我自己已经使用了上面的一些软件用于我个人和我自己的客户项目开发。实话实说,我从来没有对服务器端的计算机语言有这么高兴的时候。同样我再也不想看到没有前途的项目,比如以前我一直在项目上使用 JavaScript,直到 WebAssembly 让我彻底放弃了 JS 脚本。随着时代进步,我相信会有更多更好的功能出现。 |
请发表评论