CombineURLSession
Use this package in order to ease up working with Combine
URLSession. We support working with Codable
for all main HTTP
methods GET
, POST
, PUT
and DELETE
. We also support MultipartUpload
Instalation
To install this package just add the follwing in yor package
.package(url: "https://github.com/DanielMandea/url-session-combine.git", from: "1.0.0"),
Usage
Define SomeService Example
class SomeService: BaseService { // MARK: - Session let sessionProvider: SessionProvider // MARK: - Init init(api: API = ServiceConfiguration.api, sessionProvider: SessionProvider = DefaultSessionProvider(authenticatorProvider: Authenticator())) { self.sessionProvider = sessionProvider super.init(api: api) } func get<T: Codable>(for path: String, headers: [String: String] = ["Content-Type":"application/json"], decoder: JSONDecoder = JSONDecoder.iso8601JsonDecoder) -> AnyPublisherError> { Publishers. CombineLatest( just( path: path), sessionProvider. jwt()). flatMap { self. get( from: $0, headers: self. merge( jwt: $1, with: headers), decoder: decoder) }. eraseToAnyPublisher() } }
Call SomeService Example
get(for: "somepath/", decoder: JSONDecoder.iso8601FullDateJsonDecoder)
Multipart Upload Example
Publishers.CombineLatest(just(path: athletes), sessionProvider.jwt()).map {
URLRequest.multipart(for: $0,
method: .POST,
headers: ["Authorization": $1, "Accept-Encoding": "gzip, deflate, br"],
payload: value,
multiparts: [Multipart(key: "profilePhoto", data: profileImageData, mimeType: .jpeg, fileName: "\(UUID().uuidString).jpeg")],
encoder: JSONEncoder.iso860JSONEncoder,
decoder: JSONDecoder.iso8601FullDateJsonDecoder)
}.flatMap {
self.task(for: $0, decoder: JSONDecoder.iso8601FullDateJsonDecoder)
}
.eraseToAnyPublisher()