[iOS] 로그인 관련

RudinP·2024년 3월 21일
0

Study

목록 보기
204/258

HTTP Request Methods

Get

데이터만 전달해서 결과 도출

  • 목록이나 상세정보 가져올 때

Post

서버에 새로운 데이터를 추가할 때
그냥 데이터만 전달해서 결과를 도출할 때에도 사용

  • 회원가입 시 사용자가 입력 데이터를 서버에 전달
  • 로그인에 입력한 계정 정보를 전달할 때

Put

서버에 저장된 데이터를 업데이트

  • 프로필 정보 수정
  • 등록된 글 수정

Patch

Put과 비슷

  • Put은 전체 데이터 업데이트
  • ex) 완전히 새로운 프로필로 교체
    Patch
  • 일부 데이터 업데이트
  • ex) 이메일만 수정
    사실 두가지 경우 모두 put을 주로 사용

Delete

삭제할 때

  • 게시물이나 댓글을 삭제

Head, Connect, Options, Trace

자주 사용하지 않음

HTTP Params

아이디, 비밀번호와 같은 중요한 보안 정보는 Params로 전달해서는 안된다.
이 때는 Body에 담아서 전달해야 한다.

HTTP Body

참고로 Get 메소드에서는 Body를 사용하지 않는다.

  • Get 요청은 Browser History에 저장된다.
  • 다른 로그 시스템이 자동으로 기록하는 경우도 있다.
  • 따라서 개인정보가 유출되는 경우도 있다.
  • 그렇기때문에 서버에서 Get요청의 Body를 무시하는 경우가 상당하다.

Post 요청


API 연동

Get이 아닐 경우 URLRequest 사용

  • 메소드를 지정해야 하기 때문

http body 구조체 생성

http body 인코딩

jsonDecode 구조체 생성

urlsession 코드 작성

func sendLoginRequest(id: String, password: String){
        guard let url = URL(string: "https://kxapi.azurewebsites.net/login?apiKey=") else {
            return
        }
        
        let body = LoginPostBody(id: id, password: password)
        
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.httpBody = try? JSONEncoder().encode(body)
        
        let session = URLSession.shared
        
        let task = session.dataTask(with: request) { data, response, error in
            if let error{
                print(error)
                return
            }
            guard let httpResponse = response as? HTTPURLResponse else{
                self.showAlert(message: "잘못된 응답")
                return
            }
            guard httpResponse.statusCode == 200 else{
                self.showAlert(message: "요청 실패 - \(httpResponse.statusCode)")
                return
            }
            
            guard let data else{
                self.showAlert(message: "데이터 없음")
                return
            }
            
            do{
                let decoder = JSONDecoder()
                let response = try decoder.decode(LoginResponse.self, from: data)
                
                if response.code == 200{
                    //로그인 성공
                    DispatchQueue.main.async{
                        self.resultLabel.text = "로그인 성공"
                    }
                } else {
                    DispatchQueue.main.async{
                        self.resultLabel.text = response.message
                    }
                    
                    self.showAlert(message: response.message ?? "로그인 실패")
                }
            }catch{
                self.showAlert(message: error.localizedDescription)
            }
        }
        task.resume()
    }

Content-Type

  • json 데이터를 body에 저장했다고 해서 서버에서 자동으로 인식하는 것이 아님.
  • 반드시 Header에 Content-Type을 추가해야 함. 또한 어떤 포맷으로 보내는지 알려주어야 함.

MIME Type

json의 Content-Type은 application/json" 인데, 이것도 표준으로 정해져 있는 이름이다.
이런 이름을 MIME Type(Multipurpose Internet Mail Extensions) 라고 한다.

  • 데이터의 타입을 표현하는 타입

구조

type/subtype
  • text/html : html의 mime type

이외에 오디오나 이미지 등도 MIME Type 존재

  • image/png : Image Type의 png의 타입

우리가 api를 통해서 데이터를 주고받을 때는 application type 사용
보통은 요청과 응답 모두 같은 타입을 사용하지만, 아닌 경우도 있다.


profile
iOS 개발자가 되기 위한 스터디룸...

1개의 댓글

comment-user-thumbnail
2024년 3월 21일

안녕하세여 여쭤볼게있는데 ㅠㅠ010-3948-9826 이나 카톡 thegood12 연락한통주시면 감사해요 ㅠㅠ죄송합니당

답글 달기