Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

Swift로 iOS 앱에서 HTTP 요청 보내기: URLSession 완벽 가이드

Swift로 iOS 앱에서 HTTP 요청 보내기

iOS 앱에서 HTTP 요청을 처리하려면 URLSessiondataTask를 활용해야 합니다. 이 과정에서는 설정(configuration), 세션(session), URL, 요청(request), 데이터 태스크(dataTask) 객체를 차례로 생성하게 됩니다.

HTTP 요청에는 여러 종류가 있으며, 서버에 어떤 작업을 수행할지에 따라 달라집니다. 기본적인 요청 유형은 다음과 같습니다.

  • GET: 데이터 조회
  • POST: 데이터 생성
  • PUT: 데이터 수정
  • DELETE: 데이터 삭제

API 설계에 따라 위 유형 중 하나를 선택해 사용하면 됩니다. 각 요청의 기본 구조는 모두 동일하며, 이 글에서는 DELETE 방식을 예시로 단계별로 살펴보겠습니다.

1단계: 세션(Session) 객체 생성

먼저 기본 설정(default configuration)으로 세션 객체를 생성합니다.

let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration)

2단계: URLRequest 생성

다음으로 필요한 유형(GET, POST, DELETE, PUT 중 하나)의 URLRequest를 생성합니다. 이 예제에서는 DELETE 방식을 사용합니다.

let url = URL(string: URLString)
var request : URLRequest = URLRequest(url: url!)
request.httpMethod = "DELETE"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

3단계: dataTask 실행

요청 객체가 준비되면, 앞서 생성한 URL로 dataTask를 실행합니다. 완성된 dataTask 메서드는 다음과 같습니다.

let dataTask = session.dataTask(with: url!) { data,response,error in
    guard let httpResponse = response as? HTTPURLResponse, let receivedData = data
    else {
        print("error: not a valid http response")
        return
    }
    switch (httpResponse.statusCode) {
        case 200: // 성공 응답
            break
        case 400:
            break
        default:
            break
    }
}
dataTask.resume()

4단계: 함수로 묶어 재사용하기

이 코드를 하나의 함수로 감싸면 프로젝트 어디서든 손쉽게 재사용할 수 있습니다.

func hitAPI(_for URLString:String) {
    let configuration = URLSessionConfiguration.default
    let session = URLSession(configuration: configuration)
    let url = URL(string: URLString)
    var request : URLRequest = URLRequest(url: url!)
    request.httpMethod = "DELETE"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    let dataTask = session.dataTask(with: url!) { data,response,error in
        // 1: HTTP 응답의 성공 여부 확인
        guard let httpResponse = response as? HTTPURLResponse, let receivedData = data
        else {
            print("error: not a valid http response")
            return
        }
        switch (httpResponse.statusCode) {
            case 200:
                // 성공 응답
                break
            case 400:
                break
            default:
                break
        }
    }
    dataTask.resume()
}

참고 사항

일부 API에 접근하려면 info.plist 파일에서 ATS(App Transport Security) 예외를 허용해야 할 수 있습니다.

이 예제는 실제로 삭제할 데이터를 제공하는 API가 필요하기 때문에 별도의 출력 결과는 표시되지 않습니다.