Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- swiftUI
- UITextView
- clean architecture
- 애니메이션
- Human interface guide
- Protocol
- RxCocoa
- tableView
- ios
- Xcode
- Clean Code
- 리펙토링
- ribs
- combine
- 스위프트
- rxswift
- UICollectionView
- 리펙터링
- SWIFT
- uitableview
- HIG
- MVVM
- Observable
- Refactoring
- collectionview
- uiscrollview
- 클린 코드
- swift documentation
- map
- 리팩토링
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 4. 서버 - Alamofire를 이용한 회원가입 요청, 응답 본문
1. API문서
- rubypaper API사용
항목 | 내용 |
API 명 | Join API |
설명 | 사용자 정보를 입력받아 계정 생성 |
API 도메인 | |
API 경로 | userAccount/join |
전송방식 | POST |
인증헤더유무 | NO |
요청값 |
{ "account":사용자 계정(@를 포함한 이메일 형식), "passwd" : 비밀번호, "name" : 이름 "profile_image" :프로필 이미지(Base64로 인코딩된 바이너리 데이터) } |
응답값 |
{ "result_code" : 성공이면 0, 그 이외에는 오류코드, "result" : 성공은 SUCCESS, 실패는 FAIL, "error_msg" : 처리 결과에 대한 텍스트 메시지, "user_info" : 계정에 등록된 사용자 정보 회신 } |
2. 구현
주의사항 - falg값(해당 변수명은 isCalling)을 주어서 사용자가 서버에 중복해서 요청하는 것을 방지
- Alamofire를 통해 REQ와 RES하는 것이 핵심
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
32
33
34
35
36
37
38
39
40
41
42
|
// HTTP
@IBAction func submit(_ sender: Any) {
if(isCalling) {
alert.alert(vc: self, title: "loading.. please wating for REQ")
return
}
self.isCalling = true
let profile = self.profile.image!.pngData()?.base64EncodedString()
self.indicatorView.startAnimating()
// Parameters 타입(Alamofire프레임 워크에 있는 딕셔너리 자료형) : [String : Any]
// self.field는 각각 로그인 창에 입력하는 텍스트필드
let param: Parameters = [
"account" : self.fieldAccount.text!,
"passwd" : self.fieldPassword.text!,
"name" : self.fieldName.text!,
"profile_image" : profile!
]
// REQ
let url = "http://swiftapi.rubypaper.co.kr:2029/userAccount/join"
let req = Alamofire.request(url, method: .post, parameters: param, encoding: JSONEncoding.default)
// RES
req.responseJSON {res in
self.indicatorView.stopAnimating()
self.isCalling = false
guard let jsonObj = res.result.value as? [String: Any] else {
// alert는 UIAlertController이용하여 직접 구현한 프레임워크 사용
self.alert.alert(vc: self, title: "error in server calling REQ")
return
}
let resultCode = jsonObj["result_code"] as! Int
if resultCode == 0 {
self.alert.alert(vc: self, title: "success the sign up")
} else {
self.alert.alert(vc: self, title: "failed the sign up) msg = \(jsonObj["error_msg"]!)")
}
}
}
|
※ 로그인 했을 경우, 실패한 경우와 성공한 경우 나누어서 코딩하려면, 함수를 매개변수로 넣기
1
2
3
4
5
6
7
8
9
10
|
func login(account: String, passwd: String, success: (()->Void)? = nil, fail: ((String)->Void) = nil) {
//...
// 실패한 경우
fail?("error, because...")
// 성공한 경우
success?()
}
|
단, fail에서의 String인수가 들어가는 이유는 오류타입에 대한 메시지를 표현하기 위함
'iOS 실전 (swift) > 서버' 카테고리의 다른 글
[iOS - swift] 6. 서버 - OAuth, Key Chain, 로그인 관리 토큰 (0) | 2020.04.25 |
---|---|
[iOS - swift] 5. 서버 - Indicator View (버퍼링 표현) (0) | 2020.04.25 |
[iOS - swift] 3. 서버 - Alamofire (RESTful API) (0) | 2020.04.24 |
[iOS - swift] 2. 서버 - RESTful API 실습 (Foundation framework사용) (0) | 2020.04.24 |
[iOS - swift] 1. 서버 - HTTP, RESTful API (0) | 2020.04.23 |
Comments