API URLSession & Networking in IOS - 수정중

Boomerang·2021년 8월 13일
0

Network

목록 보기
1/2
post-thumbnail

사전지식


쿼리
: 데이터베이스에 정보를 요청하는 것
동기 & 비동기
: 데이터가 주고받는 방식
동기(동시에 일어나는)(sysnchronous)
: A,B transaction(작업처리)를 동시에 마친다

(TCP : 3-way handshaking)

비동기(동시에 일어나지 않는)(Asynchronous)
: 동시에 transaction안해도 되고 그동안 다른 일 할 수 있어서 자원 효율 사용 가능

(UDP : 3-way handshaking, but speed is fast)

Initailizer
: 클래스가 부모 클래스에서 상속한 모든 속성을 포함하여 모든 클래스의 저장 속성은 초기화 하는 동안 초기 값을 지정해줘야 한다.

designated initalizer & conveinient initailizer이 있고,
부모클래스에서 호출 & 같은 클래스에서 호출이 차이점

Fetch
: 서버에서 데이터를 가져오는 것. (promise기반 ajax 비동기 방식)

parentheses : 괄호
hyphen : -
angle braket : >


동기&비동기
javascript fetch란
initailizer


네트워킹이란

내 앱 -> API -> 웹서버
   Request
   (이때 query보냄)
   (ex: 런던의 날씨)


내 앱 <- API <- 웹서버
   Response
   (이때 data 보냄)

이렇게 request하고 response하는 과정을 네트워킹이라고 함.


IOS에서의 네트워킹

1. Create a URL

URL object를 만들고,

2. Create a URL Session

URLSession이라는 networking 하는 object를 만든다. (chrome browser이 하는 것 처럼)

3. Give URL Session a task

url을 크롬 브라우저에 입력한 것 처럼, 브라우저에 특정한 데이터를 fetching하게 한것처럼, 일을 시킨다.

4. Start the task

url을 크롬 브라우저에 입력하고 엔터 누를 것 처럼, 실행시킨다.

func performRequest(urlString: String){
	// 1. Create a URL
    
    if let url = URL(string: urlString){
    // 2. Create a URLSession
    
    let session = URLSession(configuration: .default)
    } 
    
    // 3. Give URL Session a task
    session.dataTask(with: url, completionHandler: handle(data: response: error: )
   							 // (Data?, URLReseponse?, Error?) -> Void)
    
    // 4. Start the task
    task.resume()
}

func handle(data: Data?, response: URLResponse?, error: Error?){
	if error != nil{
    	print(error!)
        return // 애러라면 그냥 return해서 이 function나가게 한다.
    }
    
    if let safeData = data{
    	let dataString = String(data: safeData, encoding: .utf8)
        print(datastring)
    }
    
}

if let url = URL(string: urlString)

URL이라는 class에서 string이라는 property를 urlString이라는 것을 passing 할것임.
참고로 string: ... 여기 부분에는 string이 들어가야함.
그리고 if let url = URL ... 하는 이유는 URL이 optional binding하기때문임. nil이 아닐경우 실행된다.

let session = URLSession(configuration: .default)

환경 default로 한다. 크롬 브라우저에서 perform하는 것 처럼.

4.번에 why resume?

멈춰질 수 있고 새롭게만들어진 task라 이 method(task.resume())호출해야 4번단계 start the task 가능. 그렇구나

completion Handler?

function이다. no output(return void)
func에 func handle()->void{}나 func handle(){}나 같음. void return은 ancle bracket안써도 됨

let dataString = String(data: safeData, encoding: .utf8)

data가 optional binding해서 property인 것이고, encoding .utf8은 unicode 방식중 하나이다. 주로 이걸쓰는듯.
utf8 참고

completion Handler에 들어가는 것은 함수라 그냥 closure통해서 바로 만들 수도 있음. 아래 코드와 위에 코드 비교.

func performRequest(urlString: String){
	// 1. Create a URL
    
    if let url = URL(string: urlString){
    // 2. Create a URLSession
    
    let session = URLSession(configuration: .default)
    } 
    
    // 3. Give URL Session a task
    session.dataTask(with: url)  { (data, response, error) in
	if error != nil{
    	print(error!)
        return // 애러라면 그냥 return해서 이 function나가게 한다.
    }
    
    if let safeData = data{
    	let dataString = String(data: safeData, encoding: .utf8)
        print(datastring)
    }
    
}
   							 
    // 4. Start the task
    task.resume()
}

profile
Hello World

0개의 댓글