티스토리 뷰
Swift

[iOS] Moya - task

dsungc 2025. 5. 3.
728x90
반응형

 

Moya에서의 task

HTTP 요청에서 “어떤 데이터를, 어떤 형식으로 보낼지”를 결정하는 프로퍼티

 

 

1. Task의 역할

  • task: TargetType 구현체에서, 해당 API 호출 시 “Payload(바디)/쿼리/파일/다운로드” 등의 전송 방식을 정의
  • HTTP 메서드(method)가 무엇이든, 실제 데이터를 어떻게 담을지(.requestPlain / .requestParameters / .uploadMultipart 등)만 책임

 

 

2. 기본 형태

2.1  .requestPlain

  • 바디가 전혀 없는 요청
  • GET, DELETE 등 그냥 URL 호출할 때 사용
var task: Moya.Task {
    return .requestPlain
}

 

2.2  .requestParameters(parameters:encoding:)

  • 키-값(key - value)을 전송
    • URLEncoding.queryString?key=val&...
    • JSONEncoding.default → JSON body
// GET /product?limit=20&page=3
case .listUsers(let limit, let page):
    return .requestParameters(
        parameters: ["limit": limit, "page": page],
        encoding: URLEncoding.queryString
    )

// POST /login { "email":"a@b.co", "pw":"1234" }
case .login(let dto):
    return .requestParameters(
        parameters: ["email": dto.email, "pw": dto.pw],
        encoding: JSONEncoding.default
    )

 

 

3. Encodable 타입 직접 사용

3.1 .requestJSONEncodable(_)

  • Swift Encodable 구조체 → 자동으로 JSON 변환 후 body에 담아 전송
  • DTO와 라우터 코드가 깔끔하게 분리
struct SignUpDTO: Encodable { let email: String; let pw: String }

case .signup(let dto):
    return .requestJSONEncodable(dto)

 

 

 

4. 파일 업로드

4.1  .uploadMultipart([MultipartFormData])

  • 여러 파일multipart/form-data 형식으로 전송 -> 파일만 전송할 때
  • 동영상 · 이미지 · JSON 필드 함께 전송
let parts: [MultipartFormData] = [
    MultipartFormData(provider: .file(localURL1),
                      name: "file1", fileName: "a.mp4",
                      mimeType: "video/mp4"),
    MultipartFormData(provider: .file(localURL2),
                      name: "file2", fileName: "b.mp4",
                      mimeType: "video/mp4")
]
return .uploadMultipart(parts)

 

 

4.2  .uploadCompositeMultipart(_, urlParameters:)

return .uploadCompositeMultipart(
    multipartBody,          // 파일들
    urlParameters: ["id": 123]  // 쿼리도 같이 
)
  • 용도: 파일 + 일반 파라미터(쿼리 스트링 또는 서버에서 지원할 경우 본문 인코딩) 를 한 번에 전송할 때
  • 파라미터 전달
    • parts: 파일 및 multipart/form-data 필드
    • urlParameters: URL 쿼리스트링(?key=val) 또는 일부 서버가 지원할 경우 JSON body에 함께 인코딩

 

728x90
반응형

'Swift' 카테고리의 다른 글

[iOS] SwiftUI 공유 기능 - ShareLink  (0) 2025.05.13
[iOS] Xcode 편집기(editor) 분할하기  (0) 2025.05.13
[iOS] 흠..MVI...? 🤔  (2) 2025.04.29
[iOS] Merquee Effect With SwiftUI  (0) 2025.04.07
[iOS] Metal - 1  (0) 2025.02.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함
250x250
반응형