사소한 삽질 - axios api

최재홍·2023년 5월 11일
0

게시글을 추가하는 api함수이다. 비동기처리를 위해 axios를 활용하였다. 그리고 알다시피 axios는 'axios.' 다음에 method를 설정하고 첫번째 인자로 요청을 보낼 URL이 들어간다. 그리고 두번째 인자로 전송보낼 데이터가 들어간다. 그리고 보통 인가를 위한 토큰 정보따위를 세번째 인자로 넣더라. 그래서 내가 알고 있는 전형적인 요청의 형태로 보냈고, 문제가 없었다.

그런데 method가 delete인 경우 api명세표 상으로 봐도 요구하는 body data도 없고, 인가 토큰은 필요한 상태라서 두번째 인자에 request headers 부분을 작성해서 넣으니 정상작동했다. 아, body data가 없으면 이렇게 안 보내는거구나 했다.

그런데 첫번째 사진의 경우처럼 유저가 무언가를 작성했고, 그 작성된 내용을 data로 전송해야 하는 경우에는 body data가 필요해지지만, 때로는 user의 동작 여부만을 전달해야하는 경우도 있다. 예를 들면 '좋아요' 기능이라든가. 그런 경우에도 id가 무엇인 유저가 id가 몇번인 게시물에 '동작했는지' 여부만 전달하면 되기때문에 두번째 인자로 body부분 대신 headers부분을 넣어서 보냈다.

그러니까 '400 Bad Request'오류가 발생했다. 이는 서버가 클라이언트 오류를 감지해 요청을 처리할 수 없다는 의미이다. (주로 잘못된 요청 구문, 유요하지 않은 요청 메시지 프레이밍 또는 변조된 요청 라우팅으로 인하여) 그래서 조언을 구해 결국 다음과 같이 요청했더니 성공하였다.

body부분을 빈 객체로라도 전달했어야 했다는 것이다. '명세표상으로는 두 요청 다 body부분을 필요로하지 않는다고 했는데 왜 어떨 때는 빈 객체로라도 표기해줘야 하고 어떨때는 비워도 되지?'라는게 궁금했는데. 대개 이런 문제는 공식문서에 대한 습득 미숙에 의한 문제이다.

이렇게 보란듯이 각 요청 메소드에 따른 필요 인자의 개수와 위치가 명시되어 있다. 보다시피 get, delete는 두번째 인자가 특별히 필요하지 않고, post, put, patch는 body 부분이 항시 명시되어 있어야만 한다.

0개의 댓글