Alamofire and SwiftyJSON are the ultimate framework of choice when it comes to Native Swift application development. But there is one small issue we need to manually bridge this two framework manually to get the final output. Hence here is the ultimate guide for how to make Network Request in Swift using Alamofire and get the response as SwiftyJSON using a Router Path.
1. URL Request
We have to first create - enum of a URLRequestConvertible
enum ActivitieRouter: URLRequestConvertible { case activitiesIndex // Activities Index case createActivities(param: Parameters) // Create Activities case updateActivity(activityID: Int, param: Parameters) // Update Activity case destoryActivity(activityID: Int) // Destroy Activity }
On each of the request we need to define the http Method
var method: HTTPMethod { switch self { case .activitiesIndex: return .get case .activityDate: return .get case .getActivity: return .get case .createActivities: return .post case .updateActivity: return .put case .destoryActivity: return .delete } }
each Request can have a sub path like -
var path: String { let subPath = "activities" switch self { case .activitiesIndex: return subPath case .updateActivity(let activityID, _): return subPath + "?" + "\(activityID)" case .destoryActivity(let activityID): return subPath + "?" + "\(activityID)" } }
Finally the most important for a Protocol is a asURLRequest function which returns the URLRequest
func asURLRequest() throws -> URLRequest { | |
var urlRequest = NetworkManager.getTokenRequest(path) | |
urlRequest.httpMethod = method.rawValue | |
switch self { | |
case .createActivities(let parameters): | |
urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters) | |
case .updateActivity(_, let parameters): | |
urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters) | |
default: | |
break | |
} | |
return urlRequest | |
} |
Refer - Gist - https://gist.github.com/bishalg/4d554cd79a138c43c00c17cebf6eb3d3
2. Response Serializable
Now task is to use extend the DataRequest so that we can response back SwiftyJSON object from our network request.
3. Network Request
Finally with our Response Serializer and Network Router ready we can finally make our Network Request.
static func mostRecent( | |
onSuccess: ObjectsCallBack? = nil, | |
onError: ErrorCallback? = nil) { | |
let route = ActivitieRouter.activityDate(activitiesDate: ActivitiesDate.recentMonth) | |
let _ = Alamofire.request(route) | |
.responseSwiftyJSON { request, response, json, error in | |
guard error == nil else { return } | |
// create - objects array or object | |
// return - objects | |
onSuccess?(objects) | |
} | |
} |
Thats is it ! Out Networkig code is complete !
Links -
https://gist.github.com/bishalg/4d554cd79a138c43c00c17cebf6eb3d3
https://gist.github.com/bishalg/0561c81f921858725731f2c36819e99c
https://gist.github.com/bishalg/ffaf0d90bd0e9d05f4db0285b2e5418a
https://gist.github.com/bishalg/0561c81f921858725731f2c36819e99c
https://gist.github.com/bishalg/ffaf0d90bd0e9d05f4db0285b2e5418a
No comments:
Post a Comment