Last active
November 17, 2017 07:54
-
-
Save shiningabdul/77269ec231a71bdd8b69235db3cd5bc4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
final class APICaller { | |
private let baseUrl:String = "http://localhost:8080/" | |
static let sharedInstance = APICaller() | |
private init() {} | |
func performCallToEndpoint<T : Transmittable>(_ endpoint:String, using method:String, body:Transmittable?, responseType: T.Type, completion: @escaping (_ error:Error?, _ serverError:ServerError?, _ response:T?) -> Void) { | |
let request = createURLRequest(toEndpoint: endpoint, using:method, body: body) | |
let task = URLSession.shared.dataTask(with: request) { data, response, error in | |
guard error == nil else { | |
print(error!) | |
completion(error, nil, nil) | |
return | |
} | |
if let httpResponse = response as? HTTPURLResponse { | |
guard httpResponse.statusCode == 200 else { | |
let serverError = ServerError.decode(from: data); | |
completion(nil, serverError, nil) | |
return | |
} | |
} | |
let serverResponse = T.decode(from: data) | |
completion(nil, nil, serverResponse) | |
} | |
task.resume() | |
} | |
private func createURLRequest(toEndpoint endpoint:String, using method:String, body:Transmittable?) -> URLRequest { | |
let url = URL(string: baseUrl + endpoint)! | |
var request = URLRequest(url: url) | |
request.httpMethod = method | |
if let body = body { | |
request.httpBody = body.encode() | |
} | |
request.setValue("application/json", forHTTPHeaderField: "Content-Type") | |
return request | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment