iOS/Test

테스트 응용 -Moya API Test-1

@서비 2022. 8. 17. 00:28

1. 우선 SPM 에서 Moya 를 추가해준다.

지금은 Rx랑 Moya 정도를 쓸 거 같아 두 개를 체크 하였다.

 

SPM -> Moya 추가화면

2. POSTMAN 으로 사용할 API 를 점검 해본다. 

이번에 사용할 API는 api.cndb.com 에서 제공하는 조크를 랜덤으로 응답해 주는 API 다.

 

 

3. Data 형태와 Request 형태를 코드로 작성 한다.

(사이트를 뒤져서 가져온 다음 몇 몇 줄을 수정 하였다.)

//jokeData.swift

import Foundation

struct Joke: Decodable {
    var type: String
    var value: Value

    struct Value: Decodable {
        var id: Int
        var joke: String
        var categories : [String]
    }
}
//jokeAPI.swift

import Foundation
import Moya

enum JokeAPI {
    case randomJokes(_ firstName: String? = nil, _ lastName: String? = nil)
}


extension JokeAPI: TargetType {
    var baseURL: URL {
        return URL(string: "https://api.icndb.com")!
    }
    
    var path: String {
        switch self {
        case .randomJokes(_, _):
            return "/jokes/random"
        }
    }
    
    var method: Moya.Method {
        switch self {
        case .randomJokes(_, _):
            return .get
        }
    }
    
    var sampleData: Data {
        switch self {
        case .randomJokes(let firstName, let lastName):
            let firstName = firstName
            let lastName = lastName
            
            return Data(
                """
                {
                    "type": "success",
                    "value": {
                        "id": 107,
                        "joke": "\(firstName)\(lastName) can retrieve anything from /dev/null."
                    }
                }
                """.utf8
            )
        }
    }
    
    var task: Task {
        switch self {
        case .randomJokes(let firstName, let lastName):
            let params: [String : String] = [
                "firstName": firstName!,
                "lastName": lastName!
            ]
            return .requestParameters(parameters: params, encoding: URLEncoding.queryString)
        }
    }
    
    var headers: [String : String]? {
        return ["Content-type": "application/json"]
    }
}

 

 

4. viewcontroller 에서 request 해서 response를 uitextview에 전달 한다.

class ViewController: UIViewController {

    @IBOutlet weak var jokeTextView: UITextView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        let provider = MoyaProvider<JokeAPI>()
               provider.request(.randomJokes("GilDong", "Hong")) { (result) in
                   switch result {
                   case let .success(response):
                       let result = try? response.map(Joke.self)
                       self.jokeTextView.text = result?.value.joke
                   case let .failure(error):
                       print(error.localizedDescription)
                   }
        }
    }

 

 

여기 까지 기본 코드 작성 하고 2부로 들어 가는 데, 중간에 아래와 같은 에러가 출력 될 것이다.

(해당 사이트에서 인증서 갱신이 안되서 발생 하는 것으로 보이고, HTTP를 사용 하는 방법을 2부에서 안내 한다.)

 

2022.08.17 - [분류 전체보기] - Test -Moya API Test-2

 

Test -Moya API Test-2

일단 해당 API를 Xcdoe에 작성하면 아래와 같은 에러가 발생한다. 022-08-17 00:43:36.034931+0900 moya[11437:77410] ATS failed system trust 2022-08-17 00:43:36.035073+0900 moya[11437:77410] Connection 1:..

iosdevhistory.tistory.com