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
에는 어떤 값을 넣어주어야 하는지 알아보자.
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
구조체 인스턴스를 생성해서 값을 할당한다.
마지막으로 request
에 login
상수를 parameters
의 값으로 넣어준다.
만약 parameteers
가 없는 경우 nil
값이 할당된다.
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
값이 할당되지만 Alamofire
의 Session
에서 모든 요청에 대해 기본 헤더를 제공한다.
기본 제공하는 헤더는 다음과 같다.
1. Accept-Encoding
br;q=1.0, gzip;q=0.8, deflate;q=0.6
을 기본값으로 제공된다.
처음에
br
,gzip
,deflate
가 무엇인지 몰라 찾아보니 인코딩 방식이였는데 아마 디코딩할 때 알려주기 위해서 사용되는 듯 하고q
는 가중치를 뜻한다. 자세한 내용은 참조에 적어놓은 MDN Docs를 참고하면 좋을 듯 하다.
Accept-Language
en;q=1.0
와 같은 시스템에서 선호하는 상위 6개 언어가 기본값으로 제공된다.
User-Agent
iOS Example/1.0 (com.alamofire.iOS-Example; build:1; iOS 14.0.0) Alamofire/5.0.0
이런 식으로 현재 앱에 대한 버전 정보를 표시한다.
오늘은 짧게 Parameters
와 Header
에 대해 공부했는데 순서를 보자면 Parameter
하고 Encoder
를 하는게 맞는데 Encoder
는 조금 더 정리해야 할 것 같아서 비교적 간단했던 Header
를 먼저 포스팅했다.
다음에 바로 Encoder
에 대해 공부한 것을 정리하려고 한다.