적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/개발 업무

[Swift iOS] 서버와 API 통신 : HTTPHeaders 헤더로 값 넘겨주기

hongssup_ 2021. 6. 3. 11:51
반응형

기존에 서버에 정보를 보내줄 때는 url에 파라미터로 데이터를 전송했는데

HTTP Header 데이터를 보내주는 방법도 있다는 알게되었다. 

API 통신을 할 때, 다음과 같이 HTTPHeaders().add 메서드를 사용해 값을 헤더로 넘겨줄 수 있다.

HTTPHeaders().add(name: String, value: String)

 

다음과 같이 기기 및 버전 정보를 헤더에 추가해서 보낼 수 있는 것 같다. 

class APIManager: NSObject {
    internal static func getAPIHeader() -> HTTPHeaders {
        var header = HTTPHeaders()
        header.add(name: "osVer", value: Utils.getOSVersion())
        header.add(name: "platform", value: "iOS")
        header.add(name: "appVer", value: Utils.getAppVersion())
        
        return header
    }
}

 

그런 다음 다음과 같이 .get 혹은 .post로 서버와 통신할 때 

var hTTPHeaders = APIManager.getAPIHeader() 이렇게 헤더 값들을 가져와 넣어준다. 

internal static func requestWithNameGet(requestName : String, parameters : [String: Any]?, response: @escaping (Bool, Any?) ->Void){
    
    let url = URL(string: requestName)
    var hTTPHeaders = APIManager.getAPIHeader()
    hTTPHeaders["Content-Type"] = "application/json"
    
    AF.request(url!, method: HTTPMethod.get, parameters: parameters, encoding: URLEncoding.default, headers: hTTPHeaders).validate().responseJSON  { (responseData) in

        switch responseData.result{
        case .success(let successData):
            response(true,successData)
            break
        case .failure(let error):
            response(false,error)
            break;
        }
    }
}

 

 

 

+ 참고로 위의 정보를 받아올 수 있는 몇가지 방법들

public class Utils {
    // OS 버전 받아오기
    internal static func getOSVersion () -> String {
        return UIDevice.current.systemVersion
    }
    // 앱 버전 받아오기
    internal static func getAppVersion() -> String {
        return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
    }
    // 빌드 버전 받아오기
    internal static func getBuildVersion() -> String {
        return Bundle.main.infoDictionary?["CFBundleVersion"] as! String
    }
    // 앱 이름 정보
    internal static func getAppName() -> String{
        return (Bundle.main.infoDictionary!["CFBundleDisplayName"] as? String)!
    }
}
728x90
반응형