服务器端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满足异步类型的路由 。 routes这些路线是最灵活,类型安全且性能最佳的路线💪。

此处理程序的路由定义为:

routes.add(TRoute(method: .post, uri: "/api/v1/user/login", handler: login))

从请求中提取模型就像在req (请求)上使用decode方法一样简单。 另外,它是异步的,并返回一个Promise来包装我们的模型,因此我们不需要手动生成JSON! 😁

在此示例中,我创建了一些帮助程序方法来简化处理程序:

  • 实际设置诺言并将结果返回给客户端的json
  • 在发生错误的情况下将错误返回给客户端的错误
  • incompleteRequest ,当我们无法将请求解码到我们的请求对象时,它将返回400

恕我直言, 带有HTTPResponse Contents和Promises的异步类型路由是最佳选择,因为它们灵活,键入安全且异步,所以我鼓励您使用它们!

最后,我们可以在main.swift设置服务器的路由,如下main.swift