在蒸气上具有Swift的REST API

今天是个好日子!

最近,我需要一个服务器端存储,其中包含针对JSON数据文件的某种发现服务。 所以我把自己拆开了:

  • 作为服务器端工程师,我的一部分正在努力将文件与另外一个JSON文件存储在Amazon S3上,以作为可用数据的发现信息。
  • 作为iOS上的客户端工程师,我的另一部分是渴望在Swift中找到一些Web服务器框架并使用它。

经过一番与自己的斗争,由于以下事实,我决定提出这个职位:

  1. 最近,我主要忙于在Swift中开发iOS应用。
  2. 实际上,我非常渴望看到与更传统的服务器技术(例如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 GET以ID的形式将请求的动画作为JSON返回:

服务器项目的最后一步是添加所需的路由规则,以便可以通过HTTP访问动画。 Vapor框架有一个用于指定路由表的单独文件,称为route.swift ,在我们的项目中,它应类似于以下内容:

现在,我们已经可以正常使用动画提供程序服务器,可以通过HTTP GET通过URL请求它,例如:

  • 烟花:http:// localhost:8080 / animation / fireworks
  • 云:http:// localhost:8080 / animation / clouds

请求不可用的动画将导致404 HTTP代码的主体为空。

注意:此时,您可能需要重新启动Web服务器,以使我们对代码所做的所有更改都可以通过REST API获得。

结论

所以我们做到了! 我们已经完成了从头开始创建Vapor项目,向服务器添加一些业务功能,通过HTTP进行部署并使其可用的过程。

我不会说,在我对诸如Java和Go这样的面向服务器的技术了解之后,Swift on Vapor上的想法就卖给了我。 但是Swift一直在发展,并且发展很快,所以我很好奇它将如何通过时间的考验,以及哪些业务应用程序将在苹果平台的客户端开发中脱颖而出。

同时,对我来说,对于那些希望使用已经熟悉的语言来熟悉服务器开发概念的iOS / macOS工程师来说,Swift on Vapor似乎是一个很好的起点。

感谢您的关注attention

资源资源

  • 充满蒸汽的“热装”。
  • 服务器源代码可在github上找到;
  • Robert Abramczyk的服务器端Swift框架比较;
  • 蒸气文件;
  • 蒸气框架。