Uso adecuado del URLRequestConquestible de Alamofire

He leído un par de tutoriales, README de @mattt, pero no puedo entender un par de cosas.

¿Cuál es el uso adecuado deURLRequestConvertible en la API del mundo real? Parece que crearé un enrutador implementandoURLRequestConvertible protocolo para todas las API: apenas será legible. ¿Debo crear un enrutador por punto final?

Segunda pregunta probablemente causada por la falta de experiencia con el lenguaje Swift. No puedo entender por quéenum se utiliza para construir enrutador? ¿Por qué no usamos la clase con métodos estáticos? Aquí hay un ejemplo (del archivo README de Alamofire)

enum Router: URLRequestConvertible {
    static let baseURLString = "http://example.com"
    static let perPage = 50

    case Search(query: String, page: Int)

    // MARK: URLRequestConvertible

    var URLRequest: NSURLRequest {
        let (path: String, parameters: [String: AnyObject]?) = {
            switch self {
            case .Search(let query, let page) where page > 1:
                return ("/search", ["q": query, "offset": Router.perPage * page])
            case .Search(let query, _):
                return ("/search", ["q": query])
            }
        }()

        let URL = NSURL(string: Router.baseURLString)!
        let URLRequest = NSURLRequest(URL: URL.URLByAppendingPathComponent(path))
        let encoding = Alamofire.ParameterEncoding.URL

        return encoding.encode(URLRequest, parameters: parameters).0
    }
}

Hay 2 formas de pasar parámetros:

case CreateUser([String: AnyObject])
case ReadUser(String)
case UpdateUser(String, [String: AnyObject])
case DestroyUser(String)

y (digamos que el usuario tiene 4 parámetros)

case CreateUser(String, String, String, String)
case ReadUser(String)
case UpdateUser(String, String, String, String, String)
case DestroyUser(String)

@mattt está usando el primero en el ejemplo. Pero eso conducirá a nombres de parámetros de "codificación rígida" fuera del enrutador (por ejemplo, en UIViewControllers). El error tipográfico en el nombre del parámetro puede provocar un error.
Otras personas están usando la segunda opción, pero en ese caso no es obvio en absoluto lo que representa cada parámetro.
¿Cuál será la forma correcta de hacerlo?

Respuestas a la pregunta(5)

Su respuesta a la pregunta