Yoloabdo / RebootingNetwork

A tutorial project for the network layer with swift protocols/generics in #SwiftCairo talk
MIT License
31 stars 17 forks source link

Headers are not included in *URLRequestBuilder* #8

Open rashidTechbayportal opened 4 years ago

rashidTechbayportal commented 4 years ago

I was sending the Bearer token in headers but it wasn't working. So, I made some changes in urlRequest and now it is working.

 var urlRequest: URLRequest { 
        var request = URLRequest(url: requestURL)
        request.httpMethod = method.rawValue
        headers.forEach { (header) in
            print(header.name, header.value)
            request.addValue(header.value, forHTTPHeaderField: header.name)
        }

        return request
    }

Full code

import Foundation
import Alamofire

protocol URLRequestBuilder: URLRequestConvertible, APIRequestHandler {

    var mainURL: URL { get }
    var requestURL: URL { get }
    // MARK: - Path
    var path: String { get }

    // MARK: - Parameters
    var parameters: Parameters? { get }

    var headers: HTTPHeaders { get }

    // MARK: - Methods
    var method: HTTPMethod { get }

    var encoding: ParameterEncoding { get }

    var urlRequest: URLRequest { get }
}

extension URLRequestBuilder {
    var encoding: ParameterEncoding {
        switch method {
        case .get:
            return URLEncoding.default
        default:
            return JSONEncoding.default
        }
    }

    var mainURL: URL  {
        return URL(string: "https://www.test.com")!
    }

    var requestURL: URL {
        return mainURL.appendingPathComponent(path)
    }

    var urlRequest: URLRequest {
        var request = URLRequest(url: requestURL)
        request.httpMethod = method.rawValue
        headers.forEach { (header) in
            print(header.name, header.value)
            request.addValue(header.value, forHTTPHeaderField: header.name)
        }

        return request
    }

    // MARK: - URLRequestConvertible
    func asURLRequest() throws -> URLRequest {
        return try encoding.encode(urlRequest, with: parameters)
    }
}