Hier ist ein Beispiel eines Alamofire RouterGemäßer Gebrauch von Alamofire Router
import Foundation
import Alamofire
enum PostRouter: URLRequestConvertible {
static let baseURLString = "http://jsonplaceholder.typicode.com/"
case Get(Int)
case Create([String: AnyObject])
case Delete(Int)
var URLRequest: NSMutableURLRequest {
var method: Alamofire.Method {
switch self {
case .Get:
return .GET
case .Create:
return .POST
case .Delete:
return .DELETE
}
}
let params: ([String: AnyObject]?) = {
switch self {
case .Get, .Delete:
return (nil)
case .Create(let newPost):
return (newPost)
}
}()
let url:NSURL = {
// build up and return the URL for each endpoint
let relativePath:String?
switch self {
case .Get(let postNumber):
relativePath = "posts/\(postNumber)"
case .Create:
relativePath = "posts"
case .Delete(let postNumber):
relativePath = "posts/\(postNumber)"
}
var URL = NSURL(string: PostRouter.baseURLString)!
if let relativePath = relativePath {
URL = URL.URLByAppendingPathComponent(relativePath)
}
return URL
}()
let URLRequest = NSMutableURLRequest(URL: url)
let encoding = Alamofire.ParameterEncoding.JSON
let (encodedRequest, _) = encoding.encode(URLRequest, parameters: params)
encodedRequest.HTTPMethod = method.rawValue
return encodedRequest
}
}
Was dies im Grunde tut, ist zu erstellen, löschen oder die Beiträge zu bekommen. Dieser Code sieht für eine einfache App, die genau das tut, sauber aus. Was ist mit einer App, die viele Endpunkte und Modelle enthält? Nehmen wir an, wir müssen verschiedene Operationen für Entitäten wie Benutzer, Firmen, Zahlungen, Kommentare, Kanäle usw. ausführen. Ich spreche von einer großen Anzahl von Endpunkten und Methoden.
In diesem Fall ist es notwendig, einen Router für jeden Endpunkt zu erstellen? Es fühlt sich nicht so an, ist es eine gute Übung, die gleiche Router-Klasse für alle diese Endpunkte zu verwenden.
Eine ähnliche Frage wurde hier gefragt: Proper usage of the Alamofire's URLRequestConvertible
Aber ich bin immer noch mit den Antworten auf obige Frage nicht erfüllt, da akzeptierte Antwort schlägt für alle Endpunkte gleiche Router zu verwenden. Was ist die beste Vorgehensweise hier?
Meine Frage ist eher tief und es ist in der Tat über eine separate Schicht (und sogar noch eine Abstraktionsschicht, wo sogar Alamofire ist nicht auf diese separate Netzwerkebene geklebt) . Dies ist eine weitere Ebene weiter als das, worüber Sie sprechen. Meine Frage bezieht sich also auf Best Practices bei der Verwendung von Alamofire Routern zur Implementierung einer Netzwerkabstraktionsschicht. – sleepwalkerfx