@@ -18,18 +18,18 @@ private struct HTTPHeader {
18
18
}
19
19
20
20
struct HttpRequest : RequestBuilder {
21
-
21
+
22
22
var baseURL : BaseURLType
23
-
24
23
var version : VersionType
25
-
26
24
var path : String ?
27
-
28
25
var methodType : HTTPMethod
29
-
30
26
var queryParams : [ String : String ] ?
31
-
32
27
var queryParamsEncoding : URLEncoding ?
28
+ var headers : [ String : String ] ?
29
+ var parameters : [ String : Any ] ?
30
+ var bodyEncoding : BodyEncoding ?
31
+ var cachePolicy : URLRequest . CachePolicy ?
32
+ var timeoutInterval : TimeInterval ?
33
33
34
34
init ( request: NetworkTarget ) {
35
35
self . baseURL = request. baseURL
@@ -40,94 +40,63 @@ struct HttpRequest: RequestBuilder {
40
40
self . queryParamsEncoding = request. queryParamsEncoding
41
41
}
42
42
43
- var pathAppendedURL : URL {
43
+ internal var pathAppendedURL : URL {
44
44
var url = baseURL. desc
45
45
url. appendPathComponent ( version. desc)
46
- url. appendPathComponent ( path ?? . empty)
46
+ if let path = path {
47
+ url. appendPathComponent ( path)
48
+ }
47
49
return url
48
50
}
49
51
50
- func setQueryTo( urlRequest: inout URLRequest ,
51
- urlEncoding: URLEncoding ,
52
- queryParams: [ String : String ] ) {
53
- guard let url = urlRequest. url else {
54
- return
55
- }
56
- var urlComponents = URLComponents . init ( url: url, resolvingAgainstBaseURL: false )
57
- switch urlEncoding {
52
+ internal func setQuery( to urlRequest: inout URLRequest ) {
53
+ guard let url = urlRequest. url else { return }
54
+ var urlComponents = URLComponents ( url: url, resolvingAgainstBaseURL: false )
55
+
56
+ switch queryParamsEncoding {
58
57
case . default:
59
- urlComponents? . queryItems = [ URLQueryItem] ( )
60
- for (name, value) in queryParams {
61
- urlComponents? . queryItems? . append ( URLQueryItem . init ( name: name, value: value) )
62
- }
63
- urlRequest. url = urlComponents? . url
58
+ urlComponents? . queryItems = queryParams? . map { URLQueryItem ( name: $0. key, value: $0. value) }
64
59
case . percentEncoded:
65
- urlComponents? . percentEncodedQueryItems = [ URLQueryItem] ( )
66
- for (name, value) in queryParams {
67
- let encodedName = name. addingPercentEncoding ( withAllowedCharacters: . nkURLQueryAllowed) ?? name
68
- let encodedValue = value. addingPercentEncoding ( withAllowedCharacters: . nkURLQueryAllowed) ?? value
69
- let queryItem = URLQueryItem . init ( name: encodedName, value: encodedValue)
70
- urlComponents? . percentEncodedQueryItems? . append ( queryItem)
60
+ urlComponents? . percentEncodedQueryItems = queryParams? . map {
61
+ URLQueryItem ( name: $0. key. addingPercentEncoding ( withAllowedCharacters: . urlQueryAllowed) ?? $0. key,
62
+ value: $0. value. addingPercentEncoding ( withAllowedCharacters: . urlQueryAllowed) ?? $0. value)
71
63
}
72
- urlRequest. url = urlComponents? . url
73
- // Applicable for PUT and POST method.
74
- // When queryParamsEncoding is xWWWFormURLEncoded,
75
- // All query parameters are sent inside body.
76
64
case . xWWWFormURLEncoded:
77
- if let queryParamsData = self . queryParams? . urlEncodedQueryParams ( ) . data ( using: . utf8) {
65
+ if let queryParamsData = queryParams? . urlEncodedQueryParams ( ) . data ( using: . utf8) {
78
66
urlRequest. httpBody = queryParamsData
79
67
urlRequest. setValue ( " application/x-www-form-urlencoded " , forHTTPHeaderField: HTTPHeader . contentType)
80
68
}
69
+ default :
70
+ break
81
71
}
72
+
73
+ urlRequest. url = urlComponents? . url
82
74
}
83
75
84
- func encodedBody( bodyEncoding: BodyEncoding ,
85
- requestBody: [ String : Any ] ) -> Data ? {
76
+ internal func encodedBody( ) -> Data ? {
77
+ guard let bodyEncoding = bodyEncoding else { return nil }
78
+
86
79
switch bodyEncoding {
87
80
case . JSON:
88
- do {
89
- return try JSONSerialization . data ( withJSONObject: requestBody)
90
- } catch {
91
- return nil
92
- }
81
+ return try ? JSONSerialization . data ( withJSONObject: parameters ?? [ : ] )
93
82
case . xWWWFormURLEncoded:
94
- do {
95
- return try requestBody. urlEncodedBody ( )
96
- } catch {
97
- return nil
98
- }
83
+ return try ? parameters? . urlEncodedBody ( )
99
84
}
100
85
}
101
86
102
87
func buildURLRequest( ) -> URLRequest {
103
- let url = self . pathAppendedURL
104
- // prepare a url request
105
- var urlRequest = URLRequest ( url: url)
106
- // set method for request
107
- urlRequest. httpMethod = self . methodType. name
108
- // set requestHeaders for request
109
- urlRequest. allHTTPHeaderFields = self . headers
110
-
111
- // set query parameters for request
112
- if let queryParams = self . queryParams, !queryParams. isEmpty,
113
- let queryParamsEncoding = self . queryParamsEncoding {
114
- self . setQueryTo ( urlRequest: & urlRequest,
115
- urlEncoding: queryParamsEncoding,
116
- queryParams: queryParams)
117
- }
118
- // set body for request
119
- if let requestBody = self . parameters {
120
- /// Encoding
121
- if let bodyEncoding = self . bodyEncoding {
122
- urlRequest. httpBody = self . encodedBody ( bodyEncoding: bodyEncoding,
123
- requestBody: requestBody)
124
- } else {
125
- urlRequest. httpBody = self . encodedBody ( bodyEncoding: . JSON,
126
- requestBody: requestBody)
127
- }
88
+ var urlRequest = URLRequest ( url: pathAppendedURL)
89
+ urlRequest. httpMethod = methodType. name
90
+ urlRequest. allHTTPHeaderFields = headers
91
+
92
+ if let queryParams = queryParams, !queryParams. isEmpty {
93
+ setQuery ( to: & urlRequest)
128
94
}
129
- urlRequest. cachePolicy = self . cachePolicy ?? URLRequest . CachePolicy. useProtocolCachePolicy
130
- urlRequest. timeoutInterval = self . timeoutInterval ?? 60
95
+
96
+ urlRequest. httpBody = encodedBody ( )
97
+ urlRequest. cachePolicy = cachePolicy ?? . useProtocolCachePolicy
98
+ urlRequest. timeoutInterval = timeoutInterval ?? 60
99
+
131
100
return urlRequest
132
101
}
133
102
}
0 commit comments