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
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"),
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) -> AnyPublisher<T, Error> {
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()