swift - 使用 Alamofire 创建一个标准的 API Router

标签 swift alamofire

按照 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

但是这个 Router 只适用于用户模型,我想知道是否有任何方法可以将这个 Router 用于多个模型。

最佳答案

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

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

关于swift - 使用 Alamofire 创建一个标准的 API Router,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30199721/

相关文章:

ios - Swift: 'NSArray?' 无法转换为 'NSArray?'

cocoa-touch - NSUserDefaults objectForKey() 接收错误

json - Alamofire 是否支持分块数据响应?

json - Swift:使用 Alamofire 访问 JSON 中的字典和模型中的私有(private)变量

ios - Alamofire "installation"不工作(嵌入式二进制文件中的红色文本)

ios - Segue 导致 UITabBarController 在 Swift 中向上移动状态栏?

ios - 当前 View Controller 内的 subview 上未调用滑动手势

ios - 如何在 iOS 中创建弹出菜单?

ios - Alamofire 4 在后台完成请求

ios - Alamofire GET If-None-Match 由于某种原因不起作用