Search
Duplicate

iOS에서의 네트워킹

Created
2023/07/10 05:02
Tags
태그
Network

iOS에서의 네트워킹

HTTP 메세지 형태
데이터를 어떻게 주고 받을지에 대한 약속

간단한 지식

GET

리소스 취득 (조회)
게시판 글 읽어오기 (데이터 표시)
READ

POST

엔티티 (등록)
게시판 글쓰기, 댓글 달기, 새로운 주문 생성
CREATE

PUT

파일 전송 (데이터 대체 / 없으면 생성)
게시글 수정 (데이터 전부 대체)
UPDATE

DELETE

파일 삭제 (삭제)
게시물 삭제
DELETE

응답 상태 코드

2xx (Success)
리퀘스트를 정상적으로 처리 했음
3xx (Redirection)
리퀘스트를 완료하기 위해서 추가 동작이 필요
4xx (Client Error)
서버는 리퀘스트 이해 불가능 (클라이언트 에러)
잘못된 요청
5xx (Server Error)
서버는 리퀘스트 처리 실패 (서버 에러)
서버 내부의 문제
HTTP 프로토콜

iOS의 네트워킹

1. URL

2. URLSession

3. dataTask

4. 시작 (resume)

import Foundation let movieURL = "http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?targetDt=20120101&key=0f86e52d90629f68901f6c965cd922ab" let structUrl = URL(string: movieURL)! URLSession.shared.dataTask(with: structUrl) { data, response, error in if error != nil { print(error!) return } if let safeData = data { let str = String(decoding: safeData, as: UTF8.self) print(str) } }.resume()
Swift
복사
영화 데이터 출력해보기!
import UIKit // Session(세션) // 일정 시간동안 같은 브라우저(사용자)로부터 들어오는 연결 상태를 일정하게 유지시키는 기술(상태) // MARK: - iOS에서의 네트워킹의 기본 // 0. URL 주소 - 문자열로 let movieURL = "http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?&key=0f86e52d90629f68901f6c965cd922ab&targetDt=20230701" // 1. URL 구조체 만들기 let url = URL(string: movieURL)! // 2. URLSession 만들기 (네트워킹을 하는 객체 - 브라우저 같은 역할) let session = URLSession.shared // 3. 세션에 (일시정지 상태로) 작업 부여 let task = session.dataTask(with: url) { (data, response, error) in if error != nil { print(error!) return } guard let safeData = data else { return } // 데이터를 그냥 한번 출력해보기 // print(String(decoding: safeData, as: UTF8.self)) dump(parseJSON1(safeData)!) } // 4. 작업시작 task.resume() // 일시정지 된 상태로 작업이 시작하기 때문 // 비동기적으로 동작함 // 받아온 데이터를 우리가 쓰기 좋게 변환하는 과정(분석) // 현재의 형태 func parseJSON1(_ movieData: Data) -> [DailyBoxOfficeList]? { do { // 자동으로 원하는 클래스/구조체 형태로 분석 // JSONDecoder let decoder = JSONDecoder() let decodedData = try decoder.decode(MovieData.self, from: movieData) return decodedData.boxOfficeResult.dailyBoxOfficeList } catch { return nil } } // 서버에서 주는 데이터의 형태 struct MovieData: Codable { let boxOfficeResult: BoxOfficeResult } // MARK: - BoxOfficeResult struct BoxOfficeResult: Codable { let dailyBoxOfficeList: [DailyBoxOfficeList] } // MARK: - DailyBoxOfficeList struct DailyBoxOfficeList: Codable { let rank: String let movieNm: String let audiCnt: String let audiAcc: String let openDt: String }
Swift
복사