iOS/Test
테스트 응용 -Moya API Test-1
@서비
2022. 8. 17. 00:28
1. 우선 SPM 에서 Moya 를 추가해준다.
지금은 Rx랑 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