Toy Project/Netflix Style Application(iOS)

3. SearchAPI 구현 1 (Networking)

개발자킹콩 2021. 4. 26. 15:43

SearchAPI 구현 1 (네트워킹)

 

이제 searchBar.text를 받아서 이를 SearchAPI를 통해 겸색 결과를 받을 것이다. 

우선 우리가 필요한 것, 구현할 것에 대해 적어보자

 

 

 

 

 


 

 

 

Type Method

 

 

우리는 class SearchAPI 를 정의하고 메소도를 선언할 것인데, 이를 instance method가 아닌 type method로 선언한다.

 

Type method 와 Instance method 의 차이점이 궁금하면!!!

—> yeongwoo-cho.tistory.com/133

 

6. Instance Method vs. Type Method

Instance Method vs. Type Method https://cocoacasts.com/swift-fundamentals-what-is-the-difference-between-instance-methods-and-type-methods-in-swift What Is the Difference Between Instance Methods an..

yeongwoo-cho.tistory.com

 

 

 


 

 

Escaping Closure

 

여기서 search는 searchBar의 text를 받고 search가 완료된 다음 수행할 기능을 completion으로 Closure를 받는다.

 

 

그렇다면 @escaping는 뭘까??

completion에 있는 코드 블럭이 메소드 밖에서 실행된다. 라는 것을 나타내는 것이다.

 

—> yeongwoo-cho.tistory.com/134

 

7. Swift Escaping Closure ?? 😁

Swift Escaping Closure ?? 참고자료 Apple Inc. The Swift Programming Language (Swift 3.1) - Escaping Closure escaping closure swift3 What do mean @escaping and @nonescaping closures in Swift? Complet..

yeongwoo-cho.tistory.com

 

 


 

 

 

 

 

지금까지는 껍데기에 대해서만 구현했다. 여기서 기능이 들어가려면 URLSession에서 배운 내용이 들어간다. 

URLSession을 통해 검색 네트워킹을 해보도록 하겠다.

 

 

 

 

 


 

 

 

 

Networking

 

SearchAPI에서 type method로 search를 정의했다. 이때 completion으로 함수가 마무리되고 return할때 실행하려고 escaping closure로 closure를 받았다. 

 

 

 

 

자! 생각해보자

현재 우리는 searchBar에서 데이터를 받아온 상태이다. 이 데이터를 통해서 서버와 네트워킹을 하려고 한다. 

IOS에서 networking을 하기 위해서는 URLSession을 이용하게 된다.

URLSession을 이용하기 위해서는 URLSessionConfiguration으로 URLSession을 만들어야 하는데 이때 .default 한 네트워킹을 지정했다.

URLSession이 만들어 졌으면 실제 네트워킹을 하는 URLSessionTask를 만들어야 하는데 우리가 사용할 것은 URLSessionDataTask이다.

이때, 위의 사진에서 파란색 표시된 것 밑의 파라미터를 가지는 dataTask를 선택하자.

그러면 이제 URL이 필요하다. 우리가 스트리밍을 할 URL을 지정하고 네트워킹을 해보자!!

 

 

 

 

 

 

Query Item으로 지정할 것은 다음과 같다.

media중에 movie를 알아보고, movie요소 정보중에 movie 자체의 정보를 가져온다.

(여기서 뮤직비디오 같은 데이터를 받아 올수도 있다.)

검색하는 데이터 term은 search type method를 호출시 받아온 파라미터 term을 넣는다.

이를 통해 해당 URLComponents의 url를 뽑아내서 requestURL을 만든다.

여기서 참고할 것은 URLComponents와 URLComponents.url은 optional이라는 것이다. 

강제로 optional을 열어서 변수에 넣도록 하자. 

 

그런다음 URLSession의 dataTask로 request를 보내게 되는데 이때, 지정한 url을 request하도록 하자.

받아온 데이터는 data, response, error이다.

여기서 return 해야하는 경우는 error이 발생했을때, response를 HTTPResponse를 못 받아 왔을 때 그리고 받아온 response가 정상적인 상태코드가 아닐 때이다. 추가적으로 데이터가 정상적으로 받아오지 않았을 때이다. 

이런 경우에서는 completion으로 함수가 마무리될때 실행되어야 할 기능에 아무것도 수행하지 않도록하고 return한다.

 

해당 데이터를 정상적으로 받아왔다면 우리는 이를 통해 search Tap Bar에서 받아온 데이터를 collectionView로 띄워주면 된다.

 

 

 

 

받아온 데이터가 정상적인지 확인하기 위해 출력해본 결과 50개의 데이터가 정상적으로 정보를 받아왔음 을 확인할 수 있다.