인프런 커뮤니티 질문&답변

ollo20님의 프로필 이미지
ollo20

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

Authentication 마무리하기

dio HTTP 요청 결과 처리

작성

·

594

0

안녕하세요!

dio 활용한 http 요청 처리에 대해 질문이 있습니다.

해당 프로젝트의 경우 http 요청의 response body에 맞는 model을 jsonSerializable로 생성하고, 해당 model을 return type으로 갖는 함수를 repository에 선언하여 response body를 model.fromJson 형태로 가져오는 걸로 이해했습니다.

 

하지만 이 경우 response body가 기존에 선언한 model의 형태와 동일한 경우에만 fromJson으로 받아올 수 있고, 다른 에러 코드 등(400 BAD_REQUEST)에 의해 response body가 다른 형태로 오게 된다면 처리가 불가능 할 것 같습니다. 이런 경우 프론트엔드에서 요청 처리를 어떻게 진행해야 하나요? repository의 함수에서 response.data 만 return 해주는 경우 해당 함수를 호출하는 다른 provider에서는 예외 처리가 어려울 것 같아서 질문드립니다!

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

2xx 형태의 상태 코드가 오지 않는다면 에러를 던지게 됩니다.

이건 dio 뿐만이 아니라 대부분의 HTTP 요청 툴들이 이렇게 작용하며 그렇지 않다면 잘못된 설계라고 볼 수 있습니다. 그렇기 때문에 400 상황에 모델 파싱이 안되는건 걱정하실 필요가 없습니다.

감사합니다!

ollo20님의 프로필 이미지
ollo20
질문자

그렇다면 요청의 결과로 동일한 4XX번 상황이지만 내부적으로 상황이 다를 경우 프론트에서 요청을 처리하는 것은(ex, ID를 잘못입력한 경우와 비밀번호가 틀린 경우를 구분하기 위함) 잘못된 API 설계라고 볼 수 있는 건가요? 아니면 해당 상황의 error를 rethrow해서 다른 함수에서 handling하는 것이 올바른 것인가요?

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

OK 상황이 아닐때 2xx 번대의 status code를 내려주는건 확실히 잘못된 설계가 맞습니다. 비밀번호가 틀린 상황이라면 400 상태를 응답 주는게 정상적이며 이 경우에는 catch 문에서 잡을 수 있습니다. 만약에 에러 상황인데 2xx를 내려주는 상황이라면 바디 메세지로 구분하는 방법밖에 없을 것 같습니다 (이런 이유때문에 꼭 2xx 상태코드는 OK 상황일때만 반환 해야합니다)

ollo20님의 프로필 이미지
ollo20
질문자

답변 감사합니다! 그럼 400번 에러에서 여러 상황이 존재하는 경우 catch와 error detail을 통하여 handling 하면 되겠네요!

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

맞습니다!

ollo20님의 프로필 이미지
ollo20

작성한 질문수

질문하기