본문 바로가기

iOS

iOS - Alamofire

Alamofire: URLRequest와 URLSession을 사용하기 편리하도록 만들어 놓은 라이브러리

1. 설치: cocoapods를 이용해서 Alamofire설치. 

 

2. 요청(request)만들기 (하나의 메소드로 끝냄.) :

Alamofire.request(url:URL, method: 요청방식, parameters: [String:String], encoding: 인코딩방식설정, headers:Header) 

헤더에 추가하고 싶은게 있다면 headers에 추가. 

open API를 찾았는데, 문서에 query(파라미터임). -h 에 있는 부분을 header에 넣음. 예: 인증키

(developers.kakao.com에서 검색 api 참고) 

=> method: get, post등 

=> parameters: query string을 딕셔너리 작성 - 이게 클라이언트가 서버에게 넘겨주는 데이터

=> encoding: 

queryString:get 방식

URLEncoding.httpBody: post 방식 

.JSONEncoding.default: json요청인 경우

 

3. 처리 방식:

Data를 받는 형식

let request = Alamofire.request(“요청주소", method:.get 또는 .post, parameters:[이름:값, ...])request.response{

response in 내용(response.data!하면 다운로드 된 데이터) 

}

2) String을 받는 형식 

request.response대신에 responseString을 적고 response.result.value!를 호출하면 문자열로 변환돼서 넘어옴. 

 

3) Json을 처리하는 방식

request.response대신에 responseJSON을 적고 response.result.value를 호출하면 파싱된 결과가 넘어옴. 

 

** Alamofire 예제실습.

프로젝트를 생성 - 생성위치를 확인. (Alamofire0725)

터미널을 실행시켜서, 프로젝트가 저장된 디렉터리로 이동. 

-> cd 프로젝트가 저장된 디렉터리  

저장된 디렉터리는 파인더에서 찾아서 터미널에 drag and drop하면 됨.

3. 터미널에서 pod init 명령을 실행 

프로젝트 디렉터리에 Podfile이 생성.

4.podfile을 열어서 alamofire의 의존성 설정.

아래와 같이 pod ‘Alamofire’ 입력 후 저장.

 

# Uncomment the next line to define a global platform for your project

# platform :ios, '9.0'

 

target 'Alamofire0725' do

  # Comment the next line if you don't want to use dynamic frameworks

  use_frameworks!

 

  pod 'Alamofire'    

  # Pods for Alamofire0725

 

end

 

5. 터미널에서 pod install명령어를 실행. 

6.기존열려있던 x-code프로젝트를 닫고 Alamofire0725.xcworkspace파일을 다시 open.

7. ViewController.swift파일에서 import Alamofire를 입력하여 제대로 작동하는지 확인.

import Alamofire

8. ViewController 클래스의 viewDidLoad메소드에 data를 다운로드 받는 코드를 추가 

   override func viewDidLoad() {

        super.viewDidLoad()

        

        //Alamofire를 이용해서 데이터 받아오기

let request = Alamofire.request("https://httpbin.org/get", method:.get, parameters:nil)

        request.response{

            response in

            let msg = String(data:response.data!, encoding:String.Encoding.utf8)

            print(msg!)

        }

}

**** 여기서 문자열을 받아오고 싶으면 아래와 같이 줄여서 작성 가능 

        //Alamofire를 이용해서 데이터 받아오기

        //문자열을 받아오는 메소드 

        let request = Alamofire.request("https://httpbin.org/get", method:.get, parameters:nil)

        request.responseString{

            response in

            print(response.result.value!)

        }

 

9. http 프로토콜을 사용하는 곳이면, info.plist 에 설정을 추가. 

*** Alamofire는 비동기적으로 동작하기 때문에 다운로드 상태 표시에 좋음. 

Alamofire의 request를 만들기 전에 다운로드를 표시하고, 작업이 종료될 때 다운로드 종료를 표시하면 됨.

 

import UIKit

import Alamofire

 

class ViewController: UIViewController {

 

    override func viewDidLoad() {

        super.viewDidLoad()

        

        //Alamofire를 이용해서 데이터 받아오기

        //문자열을 받아오는 메소드

        UIApplication.shared.isNetworkActivityIndicatorVisible = true

        let request = Alamofire.request("https://httpbin.org/get", method:.get, parameters:nil)

        request.responseString{

            response in

            print(response.result.value!)

            sleep(10)

            UIApplication.shared.isNetworkActivityIndicatorVisible = false

        }

    }

}

 

 

 

**Kakao Open API활용: JSON

 

import UIKit

import Alamofire

 

class ViewController: UIViewController {

 

    override func viewDidLoad() {

        super.viewDidLoad()

        

        //Alamofire를 이용해서 데이터 받아오기

        //문자열을 받아오는 메소드

        UIApplication.shared.isNetworkActivityIndicatorVisible = true

//        let request = Alamofire.request("https://httpbin.org/get", method:.get, parameters:nil)

//        request.responseString{

//            response in

//            print(response.result.value!)

//            sleep(10)

//            UIApplication.shared.isNetworkActivityIndicatorVisible = false

//        }

        //kakao open API활용

        //다운로드 받을 주소 생성

        var addr = "https://dapi.kakao.com/v3/search/book?target=title?query="

        //"데이터분석"이라는 한글문자열만 인코딩 문자열 만들기

        let query =

            "데이터분석"

            .addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)

        //url을 다시생성

        addr = "\(addr)\(query!)"

        //print(addr)

        //대다수의 Open API는 headers에 앱의 인증키를 삽입해야 함.

        let request = Alamofire.request(addr, method:.get, encoding:JSONEncoding.default, headers:["Authorization" : "KaKaoAK 06fab290c9f4eb6f130c09796d57bc30"])

        request.responseJSON {

            response in

            //데이터를 딕셔너리로 변환

            let data = response.result.value as! [String:Any]

            let documents = data["documents"] as! NSArray

            for temp in documents{

                let imsi = temp as! NSDictionary

                print(imsi["title"] as! String)

                let authors = imsi["authors"] as! NSArray

                for author in authors{

                    print(author as! String)

                }

            }

        }

    }

}



SwiftyJSON 라이브러리를 사용하면 손쉽게 데이터를 파싱할 수 있음.