일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 네트워크
- auth
- SwiftUI
- withAnimation
- firebase
- GCD
- combine
- UIKit
- fullscreencover
- Concurrency
- Network
- gesture
- authentication
- dataflow
- Animation
- Performance
- ios
- RxSwift
- CS
- swift
- realitykit
- 데이터최적화
- state
- stateobject
- environmentobjet
- iphone
- WWDC
- 달력
- ar
- arkit
- Today
- Total
XLOG
[Swift] RestApi, 구글 캘린더 Api 를 이용하여 대한민국 공휴일 가져오기 본문
이전 회사 면접에서 내 포트폴리오에 RestApi 를 활용한 프로젝트가 없어서, 회사에서 이런 요구사항이 오면 어떻게 해결할지에 대한 질문을 받았었다.
다행히 이전에 캘린더 관련 프로젝트를 진행하며 대한민국 공휴일 데이터를 어떻게 가져올 수 있을까 고민하면서 Rest Api 에 대한 공부를 했었다.
1. Rest Api 란 무엇일까?
RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스입니다.
출처 : https://aws.amazon.com/ko/what-is/restful-api/
2. Swift에서 무엇을 사용할까?
그건 바로 URLSession, URLRequest 이다.
URLSession 에 URLRequest를 사용하여 통신프로토콜을 사용하여 결과를 받을 수 있다.
3. 사용할 Api
사용할 api 는 Google Calendar Api 이다.
우선 Google cloud 서비스에서 프로젝트를 생성한 후 Google Calendar Api 를 사용하도록 설정을 해준다.
그후 Google Api 에 접근권한을 위한 사용자 인증 정보로 들어가 api key를 등록 해주면 된다.
위에 두 정보를 보면 key 값은 가지고 있으니, 대한민국 공휴일 calendarId 를 확인하면 된다.
구글 캘린더에 들어가보면 다른 달력 가져온 리스트에 대한민국 공휴일 캘린더가 있다. 거기서 확인을 할 수 있다.
4. 그렇다면 사용하는 방법은?
간단하다.
func requestGet() {
// 대한민국 공휴일 calendar id
// ko.south_korea.official%23holiday%40group.v.calendar.google.com
// api key 는 내가 사용자인증정보로 생성한 key 값을 넣어주면 된다.
let urlString = "https://www.googleapis.com/calendar/v3/calendars/\(calendarID)/events?key=\(apiKey)"
guard let url = URL(string: urlString) else { return }
// url Request 생성
var request = URLRequest(url: url)
request.httpMethod = "GET"
URLSession.shared.dataTask(with: request) { data, response, error in
guard error == nil else { return }
guard let data = data else { return }
guard let response = response as? HTTPURLResponse, (200 ..< 300) ~= response.statusCode else { return }
// decode의 첫번째 인자는 우리가 JSON 구조체 타입 캐스팅이 필요하다.
guard let jsonData = try? JSONDecoder().decode(CalendarJsonStruct.self, from: data) else {
print("decode error")
return
}
}.resume()
}
위 코드를 실행해 보면 data 에 우리가 요청한 URLRequest로 부터 받은 데이터가 담겨 있다.
또한 위에 data 는 json 타입으로 전달되는 것을 Url 에 접속을 해봄으로써 알 수 있으며 그 구조 또한 알 수 있다.
struct CalendarJsonStruct: Codable {
let kind: String
let etag: String
let summary: String
let updated: String
let timeZone: String
let accessRole: String
let defaultReminders : [String]
let items: [dateItem]
}
그것을 토대로 JSONDecoder가 작동할 수 있도록 codable 한 구조체를 만들어서 decode 해주면 우리가 원하는 json 형태의 데이터를 얻을 수 있다.
5. 다음 시도해 볼 것은?
swift restapi 에 대한 검색을 해보면 Alamofire 라이브러리를 사용하는 코드들이 많이 나온다. first party 가 아닌 third party 라이브러리를 사용해봤을 때와의 비교, 장점 등을 파악해봐야 하지 않을까 싶다.
'Swift > Etc' 카테고리의 다른 글
[XCTest] TDD? Testable? 업무 효율 높이기 (0) | 2023.08.01 |
---|---|
[ARKit] 은 무엇일까? 왜 발열이 심할까....? (0) | 2023.03.19 |
좋은 앱이란? - 디자인 챌린지 (Asia Pacific, 230307) 를 보고 (0) | 2023.03.07 |
모듈러 아키텍쳐? 아키텍쳐는 왜 계속 언급이 되는가.... (0) | 2023.03.03 |
[Swift] Struct VS Class (0) | 2023.03.02 |