使用蒸气3

时间:2018-08-20 18:49:58

标签: swift rest vapor

我正在尝试在 Vapor 3 服务器上添加POST端点以创建新资源,但是我想拥有3种可以创建该资源的不同JSON格式。因此,我有3个不同的Content结构,每个结构都非常相似。

struct IDJson: Content, DeckConvertible {
    var name: String?
    var format: Int
    var hero: Int
    var cards: [Int]
}

struct NameJson: Content, DeckConvertible  {
    var name: String?
    var format: Int
    var hero: String
    var cards: [String]
}

struct DeckstringJson: Content, DeckConvertible  {
    var name: String?
    var deckstring: String
}

我想将它们全部添加到我的路由器中

class DeckRouteController: RouteCollection {
    func boot(router: Router) throws {
        router.post(IDJson.self, at: "user", "collection", use: createDeckHandler)
        router.post(NameJson.self, at: "user", "collection", use: createDeckHandler)
        router.post(DeckstringJson.self, at: "user", "collection", use: createDeckHandler)
    }
}
...

private extension DeckRouteController {
    func createDeckHandler(_ request: Request, container: DeckConvertible) throws -> Future<Response> {
        // Create deck
    }
}

这可能吗?目前只使用了最后一个,但是有没有办法我可以使用一些中间件处理程序或其他东西呢?

1 个答案:

答案 0 :(得分:2)

您可以在函数本身中处理解码,即:

router.post("user", "collection", use: createDeckHandler)

func createDeckHandler(_ request: Request) throws -> String {
  let asId = try? request.content.syncDecode(IDJson.self)
  let asName = try? request.content.syncDecode(NameJson.self)
  if let asId = asId {
    // do stuff
  } else if let asName = asName {
    // do something else
  }
}