Skip to content

NetworkModule 설명서

Hyunjun edited this page Nov 14, 2024 · 4 revisions

NetworkModule 설명서

1. Endpoint 생성

  • 아래의 프로토콜에 맞춰서 Endpoint를 생성합니다.
    • scheme의 기본값: https
    • validationCode의 기본값: 200...500
    • timeout의 기본값: 300
public protocol Endpoint {
    var method: HTTPMethod { get }
    var header: [String: String]? { get }
    var scheme: String { get }
    var host: String { get }
    var path: String { get }
    var requestTask: RequestTask { get }
    var validationCode: ClosedRange<Int> { get }
    var timeout: TimeInterval { get }
}
Endpoint 예시
enum EndpointExample {
    case fetch
}

extension EndpointExample: Endpoint {
    var method: HTTPMethod {
        switch self {
        case .fetch: .get
        }
    }
    
    var header: [String: String]? {
        switch self {
        case .fetch: nil
        }
    }
    
    var host: String { "www.example.com" }
    
    var path: String {
        switch self {
        case .fetch: return "/fetch"
        }
    }
    
    var requestTask: RequestTask {
        switch self {
        case .fetch: .empty
        }
    }
    
    var validationCode: ClosedRange<Int> { 200...299 }
}

RequestTask

  • empty, withParamteres, withObject 세가지 유형이 있습니다.

    • empty: parameter, query 가 없는 요청
    • withParamteres: parameter: [String: Any], query를 가지고 있는 요청
    • withObject: parameter any Decodable, query를 가지고 있는 요청
  • 아래와 같이 6가지 유형의 task를 설정할 수 있습니다.

let task0 = RequestTask.empty

let task1 = RequestTask.withParamteres()
let task2 = RequestTask.withParamteres(body: ["key": "value"])
let task3 = RequestTask.withParamteres(query: ["queryKey": "queryValue"])
let task4 = RequestTask.withParamteres(body: ["key": "value"], query: ["queryKey": "queryValue"])

let task5 = RequestTask.withObject(body: Body())
let task6 = RequestTask.withObject(body: Body(), query: ["queryKey": "queryValue"])

2. NetworkClient를 생성하여 enpoint로 요청합니다.

let client = NetworkClient()
let response = client.request(endpoint)

Response

  • Response는 보낸 URLRequest, 받은 Data, URLResponse를 가지고 있습니다.
let urlRequest = response.request
let data = response.data
let urlResponse = response.response

Clone this wiki locally