티스토리 뷰

728x90

두번쨰 포스팅입니다! 이전 포스팅에선 아키텍처인 VIPER 패턴에 대해 알아보고, 간단하게 기본 틀을 짜봤습니다.

혹시 이전 포스팅을 안보셧다면 순서대로 보시는걸 권장 드려용(아마 이해가 안될거에용)

이전포스팅

 

이번 포스팅에선 GIthub Search API를 가져오는 GithubService.swift 파일을 작성해볼거에요.

혹시 아키텍처 부분만 보고싶으시다면 이번 포스팅은 스킵하셔도 되요!

Github API

깃허브 API 를 사용할거에요. 딱 검색부분만 할꺼라 따로 토큰발급 없이 사용하실 수 있습니당

  • url은 baseURL/search/repositories
  • method는 get 이고..
  • header와 q를 보면 될 것 같네용. page는 나중에 인피니티스크롤 포스팅으로 따로 작성해보도록 할게용.
  • baseURL은 "https://api.github.com" 입니당

그럼 response값이 어떻게 나오는지 테스트로 q에 "rxSwift"를 넣어서 사파리 url에 넣어서 테스트를 해보면..

https://api.github.com/search/repositories?q=rxSwift&page=1

뭔가 엄청많이 나오는데.. 모든 값을 사용할건 아니고.. 간단하게 제목, 설명, 주소 정도만 가져올거에요.

  • 원하는 값들은 items라는 key값에 있으니 우선 items라는 값을 가져올 거구용
  • Items 중에서 full_name(제목), description(설명), html_url(주소) 요정도..? 를 가져와볼게용

가져오고 싶은만큼 가져오셔도 되용 자세히 보시면 star 갯수 등 여러 정보들이 있어용

코드작성

이제 코드를 작성해볼게용

githubAPI 로직을 작성할 GithubService.swift 라는 파일을 하나 만들게요.

Service라는 폴터를 만들어서 이 안에 생성해줄거구용

그리고 response 모델값인 Repo.swift 라는 파일을 만들어 볼게요.

모델이기 때문에 Model이라는 폴더를 만들어서 이 안에 생성해줄게용

네이밍 잘못지은것 같은 느낌이...

우선 모델부터 건들여봅시다!

저는 여기서 검색된 Repo들의 정보 중 제목, 설명, 주소 요렇게 3가지를 가져온다고 했었죠??

Repo의 구조를 만드는거니 struct로 만들어줄게요!

요렇게 Repo라는 모델을 만들어줬습니당

가져올 값의 key를 ObjectMapper를 사용해서 넣어줬습니다.

혹시 이 모델을 왜 이렇게 만들어줬는지 이해가 안되신다면 꼭 url 주소창에 넣어서 확인해보세요!

https://api.github.com/search/repositories?q=rxSwift&page=1

다음은 github 검색 로직이 담긴 GithubService 를 작성해볼거에용

  1. alamofire를 사용해서 githubAPI를 통해 가져온 Data를
  2. 편하게 사용하기 위해 swiftyJSON으로 json화 시켜준 뒤
  3. 필요한 값인 items값을 가져와서
  4. 만들어준 Repo 모델에 넣어서 [Repo]을 리턴해주는 메소드를 만들어 줄거에요!

이렇게 [Repo]를 리턴해주는 메소드를 Interactor에서 가져와서 presenter로 넘겨주고, presenter가 view로 뿌려주는 구조..? 입니당

 

Alamofire의 사용법을 모르신다면 아래 포스팅을 참고해주세요!

alamofire 사용해보기

간단하게 말하면, 파라미터, 헤더값을 선언해주고

request로 url, get인지 post인지의 method, headers 등을 넣어서 request 해준 뒤

받은 response 값을 가지고 데이터를 가져와서 위 코드처럼 Observable를 리턴해줘도 되고, handler를 사용해주셔도 됩니당

 

이렇게 깃허브 repo들을 Observable로 리턴해주는 메소드가 완성됬어요.

그럼 잘 작동하는지 테스트를 위해 view의 viewDidLoad 부분에 임시적으로 searchRepos를 가져와서 print 해볼게용

요렇게 잘 가져와지는걸 볼 수 있습니당.

그럼 데이터 가져오는게 끝났으니 VIPER 패턴에 맞게 넣어주면 끝나네용 :)

깃허브 링크

728x90
댓글