Skip to content

Route Collections

Route collections allow multiple routes and route groups to be organized in different files or modules.

Example

Here is an example of a route collection for the v1 portion of an API.

import Vapor
import HTTP
import Routing

class V1Collection: RouteCollection {
    func build(_ builder: RouteBuilder) {
        let v1 = builder.grouped("v1")
        let users = v1.grouped("users")
        let articles = v1.grouped("articles")

        users.get { request in
            return "Requested all users."
        }

        articles.get(Article.init) { request, article in
            return "Requested \(article.name)"
        }
    }
}

This class could be placed in any file, and we could add it to our droplet or even another route group.

let v1 = V1Collection()
drop.collection(v1)

The Droplet will then be passed to the build(_:) method of your route collection and have the various routes added to it.

Empty Initializable

You can add EmptyInitializable to your route collection if it has an empty init method. This will allow you to add the route collection via its type name.

class V1Collection: RouteCollection, EmptyInitializable {
    init() { }
    ...

Now we can add the collection without initializing it.

drop.collection(V1Collection.self)