서버와 http 통신을 하다보면 request body를 통한 api연동이 있고, parameter를 통한 api통신이 있다.(물론 둘다 쓰는 경우도 많다)
기존까지는 request body를 통한 api연동을 했는데, 이번에 서버측에서 parameter를 통한 api연동방식으로 바꾸기로 해서 나 역시 기존의 코드를 수정해야한다.
기존의 body를 통한 서버연동은 위의 이미지에 나와있는 것 처럼 해당 Value에 맞게 코드를 짜면 되는데
func signup(nickname : String, email: String, password: String, completion: @escaping(NetworkResult<Any>) -> Void)
{
let url = APIConstants.signupURL //통신할 API 주소
//HTTP Headers : 요청 헤더
let header : HTTPHeaders = ["Content-Type" : "application/json"]
//요청 바디
let body : Parameters = [
"email" : email,
"nickname" : nickname,
"password" : password
]
//요청서 //Request 생성
//통신할 주소, HTTP메소드, 요청방식, 인코딩방식, 요청헤더
let dataRequest = AF.request(url,
method: .post,
parameters: body,
encoding: JSONEncoding.default,
headers: header)
하지만 이번에 바뀐 로직은 다음과 같다.
이것에 맞게 바꾸기 전에 한번 PostMan을 통해서 확인해봤다!
확인해보니 결국 URL에 파라미터값을 넣으면 되는거였다
그래서 URL을 넣을때 변수인 nickname을 할당하면 된다.
따라서 API 통신을 위해 수정한 코드는 다음과 같다.
let url = "\(APIConstants.nicknamecheckURL)?nickName=\(nickname)" //통신할 API 주소
//요청서 //Request 생성
//통신할 주소, HTTP메소드, 요청방식, 인코딩방식, 요청헤더
let dataRequest = AF.request(url,
method: .get,
encoding: JSONEncoding.default)
이렇게 url을 수정하고 실제 이벤트 시 발생할 함수(nickname값은 textfield에서 가져옴)에서 처리하면 끝!