Created
March 5, 2023 06:24
-
-
Save siamakrostami/e615cf8c7551fb34a9536a2b6219ed41 to your computer and use it in GitHub Desktop.
Network Request Header Builder
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
import UIKit | |
enum ConnectionHeaders: String{ | |
case | |
keepAlive = "keep-alive", | |
close = "close" | |
var name: String{ | |
return "connection" | |
} | |
} | |
enum AcceptHeaders: String{ | |
case | |
all = "*/*", | |
applicationJson = "application/json", | |
applicationJsonUTF8 = "application/json; charset=utf-8", | |
text = "text/plain", | |
combinedAll = "application/json, text/plain, */*" | |
var name: String { | |
return "accept" | |
} | |
} | |
enum ContentTypeHeaders: String{ | |
case | |
applicationJson = "application/json", | |
applicationJsonUTF8 = "application/json; charset=utf-8", | |
urlEncoded = "application/x-www-form-urlencoded", | |
formData = "multipart/form-data" | |
var name: String { | |
return "content-type" | |
} | |
} | |
enum AcceptEncodingHeaders: String{ | |
case | |
gzip = "gzip", | |
compress = "compress", | |
deflate = "deflate", | |
br = "br", | |
identity = "identity", | |
all = "*" | |
var name: String { | |
return "accept-encoding" | |
} | |
} | |
enum AcceptlanguageHeaders: String{ | |
case | |
en = "en", | |
fa = "fa", | |
all = "*" | |
var name: String { | |
return "accept-language" | |
} | |
} | |
enum AuthorizationHeaders: String{ | |
case | |
Basic = "Basic", | |
Bearer = "Bearer" | |
var name: String { | |
return "authorization" | |
} | |
} | |
// MARK: - HeaderHandler | |
class RequestHeaderBuilder { | |
// MARK: Lifecycle | |
private init() {} | |
// MARK: Internal | |
static let shared = RequestHeaderBuilder() | |
@discardableResult | |
func addContentTypeHeader(type: ContentTypeHeaders) -> RequestHeaderBuilder { | |
self.headers.updateValue(type.rawValue, forKey: type.name) | |
return self | |
} | |
@discardableResult | |
func addConnectionHeader(type: ConnectionHeaders) -> RequestHeaderBuilder { | |
self.headers.updateValue(type.rawValue, forKey: type.name) | |
return self | |
} | |
@discardableResult | |
func addAcceptHeaders(type: AcceptHeaders) -> RequestHeaderBuilder { | |
self.headers.updateValue(type.rawValue, forKey: type.name) | |
return self | |
} | |
@discardableResult | |
func addAcceptLanguageHeaders(type: AcceptlanguageHeaders) -> RequestHeaderBuilder { | |
self.headers.updateValue(type.rawValue, forKey: type.name) | |
return self | |
} | |
@discardableResult | |
func addAcceptEncodingHeaders(type: AcceptEncodingHeaders) -> RequestHeaderBuilder { | |
self.headers.updateValue(type.rawValue, forKey: type.name) | |
return self | |
} | |
@discardableResult | |
func addAuthorizationHeader(type: AuthorizationHeaders) -> RequestHeaderBuilder { | |
let token = "" | |
self.headers.updateValue("\(type.rawValue) \(token)", forKey: type.name) | |
return self | |
} | |
@discardableResult | |
func addCustomHeaders(headers: [String: String]) -> RequestHeaderBuilder { | |
for (key, value) in headers { | |
self.headers.updateValue(value, forKey: key) | |
} | |
return self | |
} | |
@discardableResult | |
func addCustomHeader(name: String, value: String) -> RequestHeaderBuilder { | |
self.headers.updateValue(value, forKey: name) | |
return self | |
} | |
func build() -> [String: String] { | |
return self.headers | |
} | |
// MARK: Private | |
private var headers: [String: String] = .init() | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private func createHeaderForMyRequest() -> Dictionary<String,String> { | |
return RequestHeaderBuilder.shared | |
.addAcceptHeaders(type: .applicationJsonUTF8) | |
.addAcceptEncodingHeaders(type: .gzip) | |
.addAcceptLanguageHeaders(type: .en) | |
.addAcceptHeaders(type: .applicationJsonUTF8) | |
.addAuthorizationHeader(type: .Bearer) | |
.addConnectionHeader(type: .keepAlive) | |
.addContentTypeHeader(type: .urlEncoded) | |
.build() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment