티스토리 뷰

반응형

안녕하세요 Gons 입니다.

제 블로그 통계를 보니 Alamofire 정리글 이 조회수가 가장 많아서

오늘은 URLSession 으로 알라모파이어 없이 http 통신을 해보겠습니다.

기본 Foundation 에 포함되어 있어서 따로 라이브러리 설치 안해도 됩니다.

 

 

 

 

 

 

1. GET

일단 간단하게 GET 먼저 해보겠습니다.

https://jsonplaceholder.typicode.com

이 사이트에 데이터를 가져올겁니다.

 

JSONPlaceholder - Free Fake REST API

{JSON} Placeholder Free fake API for testing and prototyping. Powered by JSON Server + LowDB. Tested with XV. As of Oct 2021, serving ~1.7 billion requests each month.

jsonplaceholder.typicode.com

 

이렇게 작성하고 실행하면

    func get() {
        //도메인 넣어서 URL 컴포넌트 생성
        var components = URLComponents(string: "https://jsonplaceholder.typicode.com")
        //도메인 뒤에 API 주소 삽입
        components?.path = "/comments"
        //파라미터 추가할거 있으면 작성
        let parameters = [URLQueryItem(name: "postId", value: "1"),
                          URLQueryItem(name: "id", value: "2")]
        components?.percentEncodedQueryItems = parameters
        //URL 생성
        guard let url = components?.url else { return }
        print(url)
        //리퀘스트 생성
        var request: URLRequest = URLRequest(url: url)
        //통신 방법 지정
        request.httpMethod = "GET"
        //태스크 생성
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            //여기서 에러 체크 및 받은 데이터 가공하여 사용
            guard let data,
                  let str = String(data: data, encoding:.utf8) else { return }
            print(str)
        }
        //실행
        task.resume()
    }

 

데이터를 잘 가져옵니다.

디버그 영역

 

https://jsonplaceholder.typicode.com/comments?postId=1&id=2

우리가 만든 이 URL을 그대로 사파리에 쳐보면 똑같은 데이터를 확인할 수 있습니다.

 

 

 

 

 

 

 

2. POST

이제 POST 를 해볼건데요

서버로 데이터를 보내야하기 때문에

https://ptsv2.com/

이 사이트에 임시 서버를 만들어서 데이터를 보내보겠습니다.

 

PTS - V2

Welcome to Henry's Post Test Server V2! This is a service for developers testing clients that POST and GET things over HTTP. To begin, use the search below to find an unclaimed toilet. (Toilets are where your dumps go) *All this form does is redirect you t

ptsv2.com

 

사이트에 접속해서 빨간색 표시한 버튼 눌러서 서버 하나 만들어주세요.

 

서버가 만들어졌습니다. 빨간색 박스 표시한 주소를 복사해주세요.

설정 보기도 눌러보면

 

통신 성공 했을 때 이런 메시지가 나온다고 합니다. 바꿀 수도 있고요.

 

자 이제 서버로 보낼 데이터 모델 하나 만들고요

struct User: Codable {
    var name: String
    var job: String
}

 

아까 복사해둔 서버 주소로 아래와 같이 작성하고 실행하면

    func post() {
        var components = URLComponents(string: "https://ptsv2.com")
        //아까 복사해둔 서버 주소
        components?.path = "/t/swnuy-1664239957/post"
        
        guard let url = components?.url else { return }
        
        var request: URLRequest = URLRequest(url: url)
        
        request.httpMethod = "POST"
        //헤더 지정
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        //타임아웃 시간 지정. (5초 이상 걸리면 중지)
        request.timeoutInterval = 5
        //Codable 모델 생성
        let bodyModel = User(name: "Gons", job: "iOS")
        //Codable 모델을 JSON 인코딩하여 데이터로 만든 후 http 바디에 추가
        request.httpBody = try? JSONEncoder().encode(bodyModel)
        
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data,
                  let str = String(data: data, encoding:.utf8) else { return }
            print(str)
        }
        
        task.resume()
    }

 

아까 컨피그에 적혀있던 내용이 잘 프린트 됩니다.

 

사이트에서 새로고침을 해보면 Dumps 에 목록이 하나 생겼습니다. 우리가 보낸겁니다.

 

view 를 눌러서 상세하게 보면 우리가 보낸 데이터가 바디에 잘 들어가 있는것을 확인할 수 있습니다.

 

 

 

 

 

 

끝입니다.

URLSession 으로 이렇게 간단하게 http 통신을 할 수 있습니다.

잘못 작성한 내용이 있거나 궁금하신 점 있으면 있으면 댓글로 알려주세요.

감사합니다 ㅎㅎ

iOS

Swift

Xcode

반응형
댓글
300x250
반응형
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday