【问题标题】:creating an standard API Router using Alamofire使用 Alamofire 创建标准 API 路由器
【发布时间】:2015-07-23 20:23:05
【问题描述】:

按照 Alamofire 文档,创建和使用路由器进行 CRUD 和授权的方法是

    enum Router: URLRequestConvertible {
        static let baseURLString = "http://example.com"
        static var OAuthToken: String?

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

        var method: Alamofire.Method {
            switch self {
            case .CreateUser:
                return .POST
            case .ReadUser:
                return .GET
            case .UpdateUser:
                return .PUT
            case .DestroyUser:
                return .DELETE
            }
        }

        var path: String {
            switch self {
            case .CreateUser:
                return "/users"
            case .ReadUser(let username):
                return "/users/\(username)"
            case .UpdateUser(let username, _):
                return "/users/\(username)"
            case .DestroyUser(let username):
                return "/users/\(username)"
            }
        }

        // MARK: URLRequestConvertible

        var URLRequest: NSURLRequest {
            let URL = NSURL(string: Router.baseURLString)!
            let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
            mutableURLRequest.HTTPMethod = method.rawValue

            if let token = Router.OAuthToken {
                mutableURLRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
            }

            switch self {
            case .CreateUser(let parameters):
                return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0
            case .UpdateUser(_, let parameters):
                return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0
            default:
                return mutableURLRequest
            }
        }
    }

Alamofire.request(Router.ReadUser("mattt")) // GET /users/mattt

但是这个路由器只适用于用户模型,我想知道是否有任何方法可以将此路由器与多个模型一起使用。

【问题讨论】:

  • 当然。只需根据需要添加更多枚举案例即可。

标签: swift alamofire


【解决方案1】:

看这里: Proper usage of the Alamofire's URLRequestConvertible

他们正在尝试做同样的事情,但他们认为把它变大可能很难处理

【讨论】:

  • 如果您认为可以在您的链接中找到此帖子的答案,请将此帖子标记为重复。
【解决方案2】:

看看Sweet router。它是类型安全的、声明性的,并具有一些不错的功能,例如 IP 类型。

你的路由器会变成这样:

struct Api: EndpointType {
    enum Route: RouteType {
        case createUser([String: AnyObject])
        case readUser(String)
        case updateUser(String, [String: AnyObject])
        case destroyUser(String)

        var defaultPath: URL.Path {
            return URL.Path("users")
        }

        var route: URL.Route {
            switch self {
            case .createUser(_):
                return .init(path: [])
            case let .readUser(username), let .updateUser(username, _), let .destroyUser(username):
                return .init(at: username)
            }
        }
    }

    static let current = URL.Environment(.http, "example.com")
}

然后你可以像这样使用它:

Alamofire.request(Router<Api>(at: .readUser("username"))

【讨论】:

    猜你喜欢
    • 2017-07-10
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 2014-09-07
    • 2023-04-11
    • 1970-01-01
    • 2018-04-13
    • 2020-07-01
    相关资源
    最近更新 更多