[강의평가사이트] 개발일지 - axios interceptors의 사용

728x90

API 사용을 단순화 하기 위해서 axios interceptors 를 사용하여 api를 모듈화하기로 

 

그리고 어제 조금이나마 구현을 했다.

 

기존에 사용하던 Api와 이후에 구현된 Api의 코드 길이가 차이가 많이 난다.

//공지사항 자세히보기 api
export const noticeDetailApi = async (notice) => {
    const url = `${PROXY_URL}/notice/?noticeId=${notice}`

    const options = {
        method: "GET",
        headers: {
            "Content-Type": "application/json",
            AccessToken: getCookie("AccessToken")
        },
        url,
    }

    try {
        const response = await axios(options)
        return response.data
    } catch (e) {
        throw e
    }
}

위의 코드가 기존에 사용하던 코드인데, Api마다 계속 공통된 주소 넣어주고 헤더에 토큰 넣어주고,

응답,오류 처리하는게 비효율적이어서 개선시키게 되었다.

 

이제 어떻게 개선했는지 적어보도록 하겠다.

 

//ApiController.js

import axios from "axios"
import { Cookies } from "react-cookie"

const cookies = new Cookies()

const PROXY_URL = window.location.hostname === "localhost" ? "" : "/proxy"

const instance = axios.create({
    baseURL: `${PROXY_URL}`,
    timeout: 5000,
})

instance.interceptors.request.use(
    function (config) {
        //request 정상
        config.headers["Content-Type"] = "application/json"
        // 쿠키에 저장된 액세스토큰을 헤더에 넣어서 전송
        config.headers["AccessToken"] = cookies.get("AccessToken")
        console.log(config)

        return config
    },
    function (error) {
        //request 에러
        return Promise.reject(error)
    }
)

instance.interceptors.response.use(
    function (response) {
        //response 정상
        console.log(response)
        return response.data
    },
    function (error) {
        //response 에러
        console.log(error)

        return Promise.reject(error)
    }
)

export default instance

 

일단 ApiController라는 js파일을 한 개 만들어주고,

axios interceptors(인터셉터)를 이용하여 공통 요청함수와 응답함수를 만들었다.

대부분의 GET요청을 하는 api들이 이 ApiController를 통해 요청하기 때문에

위의 코드보다 훨씬 단축시킬 수 있었다.

 

//공지사항 자세히보기 api
export const noticeDetailApi = async (notice) => {
    return instance({
        url: `/notice/?noticeId=${notice}`,
        method: "GET",
    })
}

이 코드랑 개선 전의 코드랑 확실히 많이 차이가 나는 것 같다.

아마 더 개선시킬 수 있을 것 같다.

더 알아보고 좀 더 개선을 시켜야겠다.

 

다만 GET요청을 할 때는 대부분 응답 처리가 비슷해서, 저런 방식이 가능하지만

POST요청일 때는 각 요청마다 응답이나 오류 내용이 달라서 이걸 어떻게 처리할지가 문제이다.

이 부분도 좀 더 알아보고 개선시키게 되면 전체적으로 api들이 보기 좋아질 것 같다.

728x90

댓글