Sample API call
import Foundation
import UIKit
class WebApiManager: NSObject {
//**************************************************
//MARK: - Properties
//**************************************************
static let sharedInstance: WebApiManager = WebApiManager()
//**************************************************
//MARK: - Methods
//**************************************************
private override init() {
}
func getSearchResult(searchKeyword: String, pageNumber: Int, completionHandler: @escaping ([Items]?, URLResponse?, Error?) -> Void) {
guard var urlComponents = URLComponents(string: str_url) else {
return
}
urlComponents.queryItems = getQueryItems(searchKeyword: searchKeyword, pageNumber: pageNumber)
guard let requestURL = urlComponents.url else {
return
}
var request = URLRequest(url: requestURL)
request.setValue(ApiConstants.BASE_URL, forHTTPHeaderField: "x-rapidapi-host")
request.setValue(ApiConstants.API_KEY, forHTTPHeaderField: "x-rapidapi-key")
let task = URLSession.shared.dataTask(with: request) { (data, urlResponse, error) in
if let data = data {
do {
let responseModel = try JSONDecoder().decode(DataModel.self, from: data)
if let items = responseModel.value {
completionHandler(items, nil, nil)
}else{
completionHandler(nil, nil, error_custom)
}
} catch {
completionHandler(nil, nil, error_custom)
}
}else {
completionHandler(nil, nil, error_custom)
}
}
task.resume()
}
func getQueryItems(searchKeyword: String, pageNumber: Int) -> [URLQueryItem] {
var queryItems = [URLQueryItem]()
for (key, val) in self.getRequest(searchKeyword: searchKeyword, pageNumber: pageNumber) {
queryItems.append(URLQueryItem(name: key, value: val))
}
return queryItems
}
func getRequest(searchKeyword: String, pageNumber: Int) -> [String: String]{
return ["safeSearch": "false", "autoCorrect": "false", "q":searchKeyword, "pageNumber":"\(pageNumber)", "pageSize":"\(ApiConstants.NUMBER_OF_RECORDS_TO_FETCH)"]
}
}
Comments
Post a Comment