Как сделать запрос HTTP Post с помощью Swift

typealias ServiceResponse = (JSON, NSError?) -> Void
class RestApiManager: NSObject {
    static let sharedInstance = RestApiManager()
    let baseURL = "http://api.randomuser.me/"
    func postUser(){}
    func getRandomUser(onCompletion: (JSON) -> Void) {
        let route = baseURL
        makeHTTPGetRequest(route, onCompletion: { json, err in
            onCompletion(json as JSON)
        })
    }
    func makeHTTPGetRequest(path: String, onCompletion: ServiceResponse) {
        let request = NSMutableURLRequest(URL: NSURL(string: path)!)
        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
            let json:JSON = JSON(data: data)
            onCompletion(json, error)
        })
        task.resume()
    }
    func makeHTTPPostRequest(path: String, body: [String: AnyObject], onCompletion: ServiceResponse) {
        var err: NSError?
        let request = NSMutableURLRequest(URL: NSURL(string: path)!)
        // Set the method to POST
        request.HTTPMethod = "POST"
        // Set the POST body for the request
        request.HTTPBody = NSJSONSerialization.dataWithJSONObject(body, options: nil, error: &err)
        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
            let json:JSON = JSON(data: data)
            onCompletion(json, err)
        })
        task.resume()
    }
}

Как я могу вызвать postuser метода httppost в моем ViewController и передать ему заголовки + закодированные параметры?

Как http://www.api.com/post/data?username=kr%209&password=12 Мне также нужно отправить сеанс/cookie/useragent в ehader.


person krikor Herlopian    schedule 07.11.2016    source источник
comment
request.allHTTPHeaderFields = [ Content-Type: application/json, Accept: application/json ] request.addValue (mySessionToken, forHTTPHeaderField: SessionToken)   -  person jpulikkottil    schedule 07.11.2016
comment
Конечно, вы можете это сделать. Если вам удалось написать код, который вы написали выше, это будет очень просто. Просто добавьте дополнительные параметры для методов с теми, которые вам нужны, а затем создайте запрос.   -  person E-Riddie    schedule 07.11.2016


Ответы (1)


Заметили, что у класса есть статическое свойство sharedInstance? Это реализация шаблона singleton в swift . Это позволяет вам вызывать методы класса RestApiManager следующим образом:

let postBody: [String: AnyObject] = [
    "username": "joe.bloggs",
    "password": "test1234"
]

RestApiManager.sharedInstance.makeHTTPPostRequest(path: "relative/url", body: postBody) { json, err in
    // Handle response here...
}

Шаблон singleton позволяет вызывать sharedInstance экземпляр класса из любой точки проекта. Вам не нужно создавать экземпляр диспетчера API в вашем viewController, чтобы использовать его.

person tebs1200    schedule 07.11.2016