Alamofire
Alamofire 깃허브 문서 를 살펴보자
Alamofire
HTTP 네트워킹 라이브러리로 애플에서는 자체적으로 네트워크 통신을 위해 URLSession을 제공하지만 보다 편리한 인터페이스를 제공하는 것이 Alamofire이다.
URLSession을 기반으로 어려운 네트워킹 작업을 보완하기 때문에 주요 로직에 집중할 수 있게 해주고 데이터 접근이 보다 수월하여 코드의 가독성이 좋아진다.
Alamofire 사용
먼저 프로젝트 파일에 라이브러리를 설치하고 프로젝트 상단에 import Alamofire 를 작성한다. Alamofire5 버전 이후부터는 AF가 Session.default에 대한 참조이다.
Alamofire의 주요 함수
통신과 관련된 모든 함수를 다룰 수 있지만 그 중에서도 자주 사용하는 주요 함수는 다음과 같다.
- AF.upload : 멀티파트, 스트림, 파일 메소드를 통해 파일을 업로드 한다.
- AF.download : 파일을 다운로드 하거나, 이미 진행 중인 다운로드를 재개한다.
- AF.request : 파일과 관련 없는 기타 HTTP를 요청한다.
Request
서버 통신 시 요청을 할 때 사용하는 함수
-> Alamofire에는 HTTPMethod라는 열거형이 저장되어 있고 이 값들은 요청을 보낼 때 메소드에 넣을 인자로 사용된다.
get에 body를 넣을 수 없다.
Response
Response를 확인하고 싶을 때는 request 뒤에 response를 붙여주면 된다. Alamofire에서 응답을 처리할 때는 6가지로 나눌 수 있다.
- response
: URLSessionDelegate에서 직접 모든 정보를 전달하고 응답 데이터를 평가하지 않는다.
AF.request(url).response { response in
print(response)
}
- responseData
: DataResponseSerializer를 사용해 서버에서 넘어온 데이터를 받고 유효성 검사를 진행한다.
AF.request(url).responseData { response in
print(response)
}
- responseString
: StringResponseSerializer를 사용해 서버에서 반환된 데이터를 지정된 인코딩을 사용하는 문자열로 변환한다.
AF.request(url).responseString { response in
print(response)
}
- responseJSON
: JSONResponseSerializer를 사용해 서버에서 반환된 데이터를 지정된 JSONSerialization.ReadingOptions를 사용하는 Any타입으로 변환한다.
AF.request(url).responseJSON { response in
print(response)
}
- responseDecodable
: DecodableResponseSerializer를 사용해 서버에서 반환된 데이터를 지정된 DataDecoder을 사용하는 Decodable타입으로 변환한다.
AF.request(url).responseDecodable { response in
print(response)
}
Validation
.validation()를 호출하여 유효성 검사를 실시한다. 만약 여기서 유효하지 않다고 판단되는 경우 response가 넘어올 수 없다.
AF.request(url)
.validate()
.response { response in
print(response)
}
공식문서를 보면 위와 같이 나와있다.
특정한 조건에 유효한 경우로 분기처리를 하고 싶다면 아래와 같이 작성하면 된다.
AF.request(UserRouter.signIn(signIn: SignInRequestModel(email: email, password: password)))
.validate(statusCode: 200...500)
.responseData { response in
switch response.result {
case .success(let data):
switch response.response?.statusCode {
case 200, 400:
guard let jsonData = try? JSONDecoder().decode(UserResponseModel.self, from: data) else { return }
return completion(.success(jsonData))
default: completion(.networkFail)
}
case .failure(let err):
print(err)
}
}
Author And Source
이 문제에 관하여(Alamofire), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pcsoyeon/Alamofire저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)