HTTP 통신같은 경우에는 잘못된 파라미터를 날리면
서버에서 BadRequest 처리를 해주고, Client에서는 BadRequest response를 받아서 예외처리를 해주었습니다.
소켓서버 통신 같은 경우에는 client에서 잘못된 요청을 보내면 어떻게 처리를 해줘야 할지 고민입니다.
가능할 것이라고 생각되는 방법은 두가지 입니다.
- Client→ Server로 emit을 했을 때, BadRequest이면 Server → Client로 특정 에러 이벤트 (’errror’) 등을 발생하게 하고, client에서는 socket.on(’error’,()⇒{}) 등으로 처리하기
- 위 방법은 Client에서 예외처리 로직이 emit했을 때의 로직과 분리되는 느낌이라서 좋지 않아보입니다…
- Client → Server로 emit 했을 때, BadRequest이면 Server→ Client로 특정 리턴값을 보내준다
이런 방법 외에도 어떤 방법이 있을까요?
Error에대한 class 혹은 model
HttpException → class
BadRequestException
→ HttpException
UnauthorizedException
NotFoundException
ForbiddenException
NotAcceptableException
RequestTimeoutException
ConflictException
GoneException
HttpVersionNotSupportedException
PayloadTooLargeException
UnsupportedMediaTypeException
UnprocessableEntityException
InternalServerErrorException
NotImplementedException
ImATeapotException
MethodNotAllowedException
BadGatewayException
ServiceUnavailableException
GatewayTimeoutException
PreconditionFailedException
소켓 통신 과정에서 HttpException이 발생하면, 바로 특정 형태를 가진 response를 만들어서 전달해준다.
GraphQL → 무조건 응답이 200 →
try {
} catch (e) {
if (e instanceof HttpException) {
adfsfasfasfas
}
}
graph 형태로 응답이 오는데
어떤 데이터는 데이터가 없을 수도 있고
어떤 데이터는 request 형태가 잘못 되어 있을 수도 있고
추가질문…
socket 통신도, rest api와 마찬가지로 unit testing, api 문서 만들기를 많이 하나요?
→ 있으면 당연히 좋지 않을까?
- 요청과 응답에 대한 양식이 있으면 편하지 않을까요?
- 테스트코드가 존재하면 당연히 조금 더 안전한 코드를 작성하게 되지 않을까요?
감사합니다 😊