2017-12-12 10 views
1

422 응답, 나는 편안하고 API 같은 전화 :스위프트 4 URLSession 스위프트 (4)를 사용하여 없음 오류

let session = URLSession.shared 
     session.dataTask(with: request) { (data, response, error) in 
      if error != nil { 
       completion(nil) 
      } else { 
       if data != nil, let user = try? MyRequests.jsonDecoder.decode(User.self, from: data!){ 
        completion(user) 
       } 
       else{ 
        completion(nil) 
       } 
      } 
      }.resume() 

응답은 422의에 statusCode, 실패하는 코드를 가지고 있지만, 오류가 전무하다. 이것은 왜 발생 하는가?

+0

https://restpatterns.mindtouch.us/HTTP_Status_Codes/422_-_Unprocessable_Entity –

+0

우편 배달부의 URL을 확인하고 출력 내용을 확인하십시오. –

+1

API 문서를보아야합니다. 해당 API 뒤에있는 엔지니어가 모범 사례를 따르지 않았고 오류가 정확한 오류 원인을 설명하는 실제 오류 메시지와 함께 제공되지는 않는다는 것을 나타내는 상태 코드가있는 것처럼 보입니다. REST API가 둘 다 수행해야하는 표준/규칙이 없으므로 "왜 이런 일이 발생합니까?"라는 질문에 대해 명확한 대답을 줄 수있는 유일한 사람은 해당 API를 작성한 사람입니다. –

답변

2

URLSession.dataTask에 의해 반환 된 값은 네트워크 오류 (예 : 인터넷 연결 없음)를 나타내는 데 사용됩니다. 그러나이 변수에는 백엔드/API 오류가 반환되지 않습니다.

data 변수를 구문 분석해야합니다. 백엔드가보다 정교한 오류 메시지를 응답 본문으로 반환하면 정확한 원인을 알 수 있습니다. 기본 제공 네트워킹 방법은 실제로 HTTP 상태 코드를 평가하지 않으므로 수동으로 수행해야합니다.

시스템 라이브러리에서 평가하는 것은 바람직하지 않습니다. 모든 API가 HTTP 상태 코드를 따르지 않으므로 자동으로 평가하여 잘못된 성공/오류 메시지가 발생할 수 있기 때문입니다. 또한 오류 메시지를 반환하기위한 HTTP 요청/응답의 표준 부분이 없기 때문에 오류 메시지의 자동 파싱도 문제가 될 수 있습니다.