LoginSignup
5
1

More than 5 years have passed since last update.

Vaporのルーティングについて

Posted at

Vapor のルーティング周りについて詰まったことが多かったので、まとめてみました。
Vapor のルーティングは routes.swift に記述していきます。

環境

この記事では以下の環境で動作を確認しています。

  • swift 5.0
  • vapor 3.3.0

基本的なルーティング

// GET /user
router.get("user") { req in
    return "/user"
}

パラメータの型を指定(String)

// GET /onetime/:key
router.get("onetime",  String.parameter) { req -> String in
    let key = try req.parameters.next(String.self)
    return "/onetime/\(key)"
}

パラメータの型を指定(Int)

// GET /users/:userId
router.get("user",  Int.parameter) { req -> String in
    let userId = try req.parameters.next(Int.self)
    return "/user/\(userId)"
}

/user/xxxxのような Intに変換できないパラメータを渡すと以下のレスポンスが返ります。

{
  "error": true,
  "reason": "The parameter was not convertible to an Int"
}

パラメータの後ろにエンドポイントを設定

// GET /user/:userId/profile
router.get("user",  Int.parameter, "/profile") { req -> String in
    let userId = try req.parameters.next(Int.self)
    return "/user/\(userId)/profile"
}

複数のパラメータ

// GET /user/:userId/post/:postId
router.get("user",  Int.parameter, "/post", Int.parameter) { req -> String in
    let userId = try req.parameters.next(Int.self)
    let postId = try req.parameters.next(Int.self)
    return "/user/\(userId)/post/\(postId)"
}

グループによるルーティング

// GET /api/v0/user
router.group("api") { api in
    api.group("v0") { v0 in
        v0.get("user") { v0 in
            return "/api/v0/user"
        }
    }
}

参考

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1