[Swift]Alamofire 사용해보기_(3)

나는 사과·2021년 2월 3일
0

Alamofire

목록 보기
3/4

1편과 2편을 통해서 데이터를 request, response 그리고 유효성을 검사하는 validate까지 알아봤다. 근데 request안에 다양한 매개변수에 대해서는 놓쳐서 정리해보려고 한다.

아래는 Alamofire 깃허브 문서에 나와있는request의 형태 중 하나이다.

open func request<Parameters: Encodable>(_ convertible: URLConvertible,
                                         method: HTTPMethod = .get,
                                         parameters: Parameters? = nil,
                                         encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default,
                                         headers: HTTPHeaders? = nil,
                                         interceptor: RequestInterceptor? = nil) -> DataRequest

와일드카드 식별자(_)는 요청을 보낼 URL이 들어가고, 아래 method에는 앞서 알아본 HTTP Method가 들어가게 된다. 그럼 parameters, encoder, headers, interceptor에는 어떤 값을 넣어주어야 하는지 알아보자.


Parameters

Alamofire는 기본적으로 모든 Encodable 타입의 값을 request의 매개변수로 사용하는 것을 허용한다.

여기서 Encodable 타입은 애플 공식 문서에서는 다음과 같이 설명하고 있다.

한국어로 번역을 하면
"외부 표현으로 자신을 인코딩 할 수 있는 타입" 을 말한다.

깃허브 문서에서는 다음과 같이 parameter를 만들어서 사용하고 있다.

// Encodable 타입의 구조체 Login을 만들고
struct Login: Encodable {
    let email: String
    let password: String
}

// 인스턴스 생성
let login = Login(email: "test@test.test", password: "testPassword")

// request에 parameter 추가
AF.request(url, method: .post, parameters: login, ...)

먼저 parameter로 사용할 Encodable타입의 구조체 Login을 만들고 값을 넣어서 login상수에 Login구조체 인스턴스를 생성해서 값을 할당한다.
마지막으로 requestlogin상수를 parameters의 값으로 넣어준다.

만약 parameteers가 없는 경우 nil값이 할당된다.


Headers

HTTP Header의 이름과 값의 쌍으로 이루어진 HTTPHeaders타입을 갖는데 이 매개변수는 HTTPHeaders타입의 키-값 쌍을 캡슐화하고 공통 헤더에 대한 정적 값을 제공한다.

header는 2가지 방식으로 만들 수 있다.

// 1)
let headers: HTTPHeaders = [
    "Authorization": "Basic VXNlcm5hbWU6UGFzc3dvcmQ=",
    "Accept": "application/json"
]

// 2)
let headers: HTTPHeaders = [
    .authorization(username: "Username", password: "Password"),
    .accept("application/json")
]

방법2는 방법1을 HTTPHeader 배열 방식으로 표현한 방법이다.

headers에는 기본 값으로 비어있으면 nil값이 할당되지만 AlamofireSession에서 모든 요청에 대해 기본 헤더를 제공한다.

기본 제공하는 헤더는 다음과 같다.
1. Accept-Encoding
br;q=1.0, gzip;q=0.8, deflate;q=0.6을 기본값으로 제공된다.

처음에 br, gzip, deflate가 무엇인지 몰라 찾아보니 인코딩 방식이였는데 아마 디코딩할 때 알려주기 위해서 사용되는 듯 하고 q는 가중치를 뜻한다. 자세한 내용은 참조에 적어놓은 MDN Docs를 참고하면 좋을 듯 하다.

  1. Accept-Language
    en;q=1.0와 같은 시스템에서 선호하는 상위 6개 언어가 기본값으로 제공된다.

  2. User-Agent
    iOS Example/1.0 (com.alamofire.iOS-Example; build:1; iOS 14.0.0) Alamofire/5.0.0 이런 식으로 현재 앱에 대한 버전 정보를 표시한다.


오늘은 짧게 ParametersHeader에 대해 공부했는데 순서를 보자면 Parameter 하고 Encoder를 하는게 맞는데 Encoder는 조금 더 정리해야 할 것 같아서 비교적 간단했던 Header를 먼저 포스팅했다.

다음에 바로 Encoder에 대해 공부한 것을 정리하려고 한다.


출처

0개의 댓글