[ios] Alamofire에 대한 내용

감자·2020년 10월 5일
0

Alamofire

why?

->
이제 슬슬 토이프로젝트의 로그인과 회원가입 관련된 로직을 구성해야하는데 이전에 공부했던 Alarmofire에 대한 내용이 가물가물하다.... 나중에 까먹었을 때를 대비에서 이참에 글로 남겨놓을 생각이다.!!! :)

what?

->

1. Alarmofire에 대한 기본적인 내용

Alarmofire가 무엇인지 또 어떠한 이유로 사용하는가에 대한 내용은 이미 다른 블로그에서 많이 다루고있다. 이번 글은 오로지 나의 작업을 위해 공부했던 내용을 상기 시키는 용도이기 때문에 간단한 설명을 아래 블로그로 대체하고 까먹을때마다 아래 블로그를 참고할 예정이다.

https://velog.io/@budlebee/iOS-Alamofire-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-API-%ED%98%B8%EC%B6%9C

https://devmjun.github.io/archive/Alamofire

2. 관련된 세부내용(윗 블로그에 나오지 않은 내용들을 정리)

Request

Alarmofire의 기본코드는 아래와 같다

import Alarmofire
Alarmofire.request("호출할 URL")

Alarmofire의 HTTP메소드의 기본값은 GET 방식이다
만약 post방식으로 요청을 하고싶을 경우에는 아래와 같이 사용해야한다.

let parma: Parameters = [
"userId" : "ynwa3690"
"name" : "김재석"
]
Alarmofire.request("호출할 url", method: .post, parameters: parma, encoding: .URLEncoding.httpBody)
  • 전달해야할 값이 있다면 딕셔너리 타입으로 전달해야한다.(parma처러 만들고 전달해야한다.)
  • 만약 전달하는 값의 한글이나 특수문자등이 포함되어 있을 경우 서버에서 잘못 받아들일 수 있다. 그래서 인코딩하는 과정이 필요한데 인코딩되는 형식은 encoding 파라미터를 통해서 결정할 수 있다.(encoding파라미터에 들어가는 값의 타입은 ParameterEncoding프로토콜을 준수하는 열거형이나 구조체, 클래스등이 가능한데 대표적으로 URLEnconding구조체가 사용된다. 이 구조체는 총 3가지 타입이 정적변수로 정의되어있다.)
    ㄱ. .methodDependent: 메소드 타입의 따라 자동으로 인코딩 타입이 결정된다. 예를들어 get방식이면 .querryString, post방식이면 .httpBody가 적용된다.
    ㄴ. .querryString: GET방식에서 사용되는 쿼리 스트링 방식으로 인코딩된다.
    ㄷ. .httpBody : post방식에서 사용되는 HTTP Body 방식으로 인코딩된댜.
  • httpBody 형식으로 인코딩할 경우 content-Type은 자동으로 'application/x-www-from-urlencoded:utf-8'으로 설정된다.
  • json방식으로 전달하고싶을때는 URLEncoding대신에 JsonEncoding으로 설정해야한다. 예시구문은 아래와 같다.
let parma: Parameters = [
"userId" : "ynwa3690"
"name" : "김재석"
]
Alarmofire.request("호출할 url", method: .post, parameters: parma, encoding: JsonEncoding.default)
  • 위와 같이 설정하면 content-Type은 자동으로 'applicatino/json'형식으로 변경된다.

Response

기본적으로 Alarmofire는 서버로부터 응답을 받기위한 여러가지 메소드를 제공한다.
그러나 urlSession과 마찬가지로 비동기적으로 동작하기 때문에 서버가 바로 응답값을 보내준다는 보장이없다.
이에 대한 대안으로 응답이 도착했을 때 실행할 로직을 클로져로 작성하여 처리한다.

  • response() : 응답결과를 별다른 처리하지 않고 반환한다.
  • responseString() : 응답결과를 문자열로 처리한 후 전달한다.
  • responseJson() : 응답결과를 json 형태로 처리한 후 전달한다.
  • responseData() : 응답결과를 바이너리 데이터로 변환한 후 전달한다.

0개의 댓글