SwiftyJSON과 Alamofire을 사용해서 Naver 번역 OPEN API를 가져와서 구현할 것임
SwiftyJSON은 Alamofire와 함께 쓸 수 있는데 HTTP 통신할 수 있게 도와주는 라이브러리로 유명하다.
어떻게 사용하는지 예시코드를 그대로 가져가서 사용하면 된다.
Alamofire 5부터 AF가 사용되는 점, AF는 Session.default를 참조하는 것.
func requestTranslatedData(text: String) {
// URL에 다 담는 것이 아님
let url = EndPoint.translateURL
// Header : 메타정보
// Body : 실질적인 데이터
// Naver 개발 가이드에서 제공하는 걸 보고 따라하자
let parameter = ["source": "ko", "target": "en", "text": userInputTextView.text!]
let header: HTTPHeaders = [
"X-Naver-Client-Id": APIKey.NAVER_ID,
"X-Naver-Client-Secret": APIKey.NAVER_KEY
]
AF.request(url,
method: .post,
parameters: parameter,
headers: header).validate(statusCode: 200..<400).responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
// 상태코드 - 값이 없으면 500
let statusCode = response.response?.statusCode ?? 500
if statusCode == 200 {
self.userInputTextView.text = json["message"]["result"]["translatedText"].stringValue
} else {
self.userInputTextView.text = json["errorMessage"].stringValue
}
case .failure(let error):
print(error)
}
}
}
url은 Constant 파일에 EndPoint 열거형에 타입프로퍼티로 저장해서 가져온다.
HTTP-Header에는 메타정보가, HTTP-Body에는 실질적인 데이터가 들어있다.
HTTP-Method는 Get, Post, Put, Patch, Delete 등이 있고, StatusCode는 200 ~ 500까지 존재한다.
보통 성공은 200 ~ 400번대까지 처리해주고 500은 서버오류로 값이 없어서 에러로 처리해준다.
서버 호출을 해야 하기 때문에 request 메소드를 사용한다.
request 메소드에는 파라미터가 있는데
url 주소, HTTP Method, request body(request parameter - post할 때 존재하고 get인 경우에는 없음), HTTP-Header 가 있다. 각각의 파라미터는 옵셔널로 필요 없으면 알아서 빼주면 된다.
Header의 경우, [String: String] 타입인데 따로 선택해서 보면 HTTPHeaders 타입을 갖고 있다.
뒤에 나오는 validate는 유효성을 확인해주는 메소드이다.
statusCode를 통해서 검증을 한다. 보통 200번대는 성공을 의미하고, 400은 클라오류, 500은 서버오류
그리고 switch문으로 분기처리해서 성공인 경우 내부에 동작코드를 작성해주면 된다.
이 경우에도 특정 상태 코드에만 결과값을 보이게 분기처리를 해주려면 상태코드에 접근해야 하는데
let statusCode = response.response?.statusCode ?? 500
내부에서 json에 접근하는 방식은
json["message"]["result"]["translatedText"].stringValue
'⭐️ 개발 > iOS & Swift' 카테고리의 다른 글
[Swift] 강순참이 존재하게 된 이유... (0) | 2022.08.05 |
---|---|
[Swift] 일급 객체, Closure (1) (0) | 2022.08.03 |
[Swift] Singleton Pattern (0) | 2022.08.02 |
[Swift] ReusableViewProtocol로 뷰컨/셀 식별자 사용하기 (0) | 2022.08.02 |
[Swift] Class와 Struct 그리고 부스러기 개념들 (0) | 2022.07.29 |