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

Popular posts from this blog

SubString in Swift

PUSH Notification