import Foundation
import UIKit
class ViewModel:NSObject {
func hitPostApi(username: String, password: String, completion: @escaping (Bool) -> Void) {
let url = "https://dummyjson.com/auth/login"
guard let serviceUrl = URL(string: url) else { return }
let parameters: [String: Any] = [
"username": username,
"password": password
]
var request = URLRequest(url: serviceUrl)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else {
return
}
request.httpBody = httpBody
request.timeoutInterval = 20
let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in
if let error = error {
print("Error: \(error.localizedDescription)")
completion(false)
return
}
guard let data = data else {
completion(false)
return
}
do {
let decoder = JSONDecoder()
if let loginResponse = try? decoder.decode(LoginproductModel.self, from: data) {
UserDefaults.standard.setValue(loginResponse.accessToken, forKey: "accessToken")
print("Login Successful")
print("Data",data)
print("Token", loginResponse.accessToken)
completion(true) // Notify success
} else {
print("Failed to decode login response")
completion(false)
}
}
}.resume()
}
func changeApiKey(completionHandler: @escaping(AfterLogin) -> Void) {
if let url = URL(string: "https://dummyjson.com/auth/me") {
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("text/plain",forHTTPHeaderField: "Accept")
// request.addValue("sk_d3KmPtjEtdGTjChLB0ylraAb/AWgfyR9MOxFXwgEWSZsnpoIXFVDfm1Snoak0ufRe0w=", forHTTPHeaderField: "secret_key")
// request.addValue("pk_Bvk6rVC7WxbRW2O3sy4xwCEiM+n8jdT55BQv4BA0zG4IawzpbDhTVzSvj43DcvU7cM0x", forHTTPHeaderField: "publish_key")
// request.addValue("Bearer \(String(describing: UserDefaults.standard.string(forKey: "acessToken")))", forHTTPHeaderField: "Authorization")
var token = String()
token = UserDefaults.standard.string(forKey: "accessToken") ?? ""
request.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard error == nil else {
print(error!)
return
}
guard let jsonData = data else { return }
do {
let decoder = JSONDecoder()
let productsResponse = try decoder.decode(AfterLogin.self, from: jsonData)
let productDetails = productsResponse
DispatchQueue.main.async {
//self.tblData = productDetails.body?.nutritionistsList
// tbale.reloadData()
}
completionHandler(productDetails)
}catch {
print(error.localizedDescription)
}
}
task.resume()
}
}
}
Here is the complete code for REST API requests using NSURLSession in swift
For GET Request
let configuration = NSURLSessionConfiguration .defaultSessionConfiguration()
let session = NSURLSession(configuration: configuration)
let urlString = NSString(format: "your URL here")
print("get wallet balance url string is \(urlString)")
//let url = NSURL(string: urlString as String)
let request : NSMutableURLRequest = NSMutableURLRequest()
request.URL = NSURL(string: NSString(format: "%@", urlString) as String)
request.HTTPMethod = "GET"
request.timeoutInterval = 30
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let dataTask = session.dataTaskWithRequest(request) {
(let data: NSData?, let response: NSURLResponse?, let error: NSError?) -> Void in
// 1: Check HTTP Response for successful GET request
guard let httpResponse = response as? NSHTTPURLResponse, receivedData = data
else {
print("error: not a valid http response")
return
}
switch (httpResponse.statusCode)
{
case 200:
let response = NSString (data: receivedData, encoding: NSUTF8StringEncoding)
print("response is \(response)")
do {
let getResponse = try NSJSONSerialization.JSONObjectWithData(receivedData, options: .AllowFragments)
EZLoadingActivity .hide()
// }
} catch {
print("error serializing JSON: \(error)")
}
break
case 400:
break
default:
print("wallet GET request got response \(httpResponse.statusCode)")
}
}
dataTask.resume()
For POST request ...
let configuration = NSURLSessionConfiguration .defaultSessionConfiguration()
let session = NSURLSession(configuration: configuration)
let params = ["username":bindings .objectForKey("username"), "provider":"walkingcoin", "securityQuestion":securityQuestionField.text!, "securityAnswer":securityAnswerField.text!] as Dictionary<String, AnyObject>
let urlString = NSString(format: “your URL”);
print("url string is \(urlString)")
let request : NSMutableURLRequest = NSMutableURLRequest()
request.URL = NSURL(string: NSString(format: "%@", urlString)as String)
request.HTTPMethod = "POST"
request.timeoutInterval = 30
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(params, options: [])
let dataTask = session.dataTaskWithRequest(request)
{
(let data: NSData?, let response: NSURLResponse?, let error: NSError?) -> Void in
// 1: Check HTTP Response for successful GET request
guard let httpResponse = response as? NSHTTPURLResponse, receivedData = data
else {
print("error: not a valid http response")
return
}
switch (httpResponse.statusCode)
{
case 200:
let response = NSString (data: receivedData, encoding: NSUTF8StringEncoding)
if response == "SUCCESS"
{
}
default:
print("save profile POST request got response \(httpResponse.statusCode)")
}
}
dataTask.resume()
I hope it works.