일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 포도주시식
- react
- 파이썬
- 프로그래머스 #정수삼각형 #동적계획법
- nodejs
- X
- 동적계획법
- discord.js
- background script
- 백준 7579
- 자료구조
- 크롬 확장자
- Chrome Extension
- C언어로 쉽게 풀어쓴 자료구조
- TypeScript
- popup
- content script
- webpack
- 2156
- 디스코드 봇
- 공부시간측정어플
- 백준
- Message Passing
- supabase
- 갓생
- 캠스터디
- 크롬 익스텐션
- 백준 #7568번 #파이썬 #동적계획법
- Today
- Total
히치키치
이상청 : Axios interceptor, instance 모듈화 통한 api 통신 본문
💙 Axios란
Promise api를 활용하는 http 비동기 통신 라이브러리
💙 Axios 선정 이유
1. 간단한 메서드로 요청 타입을 작성해 restful API에 CRUD 요청에 유리함
2. 데이터 전송 시 자동으로 JSON 변환되어 fetch와 달리 JSON.stringify 불필요
3. 별개로 status와 statusText가 별개로 제공되어 철저한 응답 상태 구분/처리 가능
3. http 요청 가로챌 수 있는 interceptor 기능 제공
💙 Axios instance 생성
create() 메서드 사용
config 설정 옵션으로 baseURL, headers의 Access-Control-Allow-Origin, withCredentials을 설정함
headers의 Bearer Token 설정은 interceptor 이용해 요청 전 상황에 대한 에러 핸들링 코드와 같이 있도록 함
cf) dev와 prod 구분해 BASE_URL 설정 가능
// production 환경과 develop 환경에 따른 BASE_URL 부여 코드
export const BASE_URL: { [key: string]: string } = {
development: '~~~',
production: '~~~',
};
// 부여된 BASE_URL에 따른 axios instance 생성
axios.create({
baseURL: BASE_URL[process.env.NODE_ENV] || BASE_URL.development,
});
1. serverAxios : 인증이 불필요한 api 통신에 사용됨
2. privateAxios : Token Bearer 인증이 필요한 api 통신에 사용됨
해당 axios 인스턴스 생성과 동시에 토큰 값으로 localStorage에서 값을 가져오는 방식 X
해당 axios interceptor-request에서 정상인 상황인 경우에만 localStorage에서 값을 가져와 header로 설정되도록 함
💙 Axios http 요청 모듈화
1. 디렉토리 관리 및 api 요청 함수 작성 구조
1. index.js : axios 인스턴스 생성
2. ****.apis.js : api 요청 prefix 따라 호출 함수 모아 함수 작성
예시) Vote.apis.js 내에는 vote 관련 api 호출 함수 존재
const prefix = api/v1/votes
모든 투표 목록 불러오는 api :
get : ${prefix}
특정 투표에 대해 찬반 투표하는 api:
post : ${prefix}/yesorno
특정 유저가 특정 투표에 대한 투표 여부와 해당 투표 결과 보이는 api :
get : ${prefix}/yesorno?userId=${userId}&votePostId={votePostId}
💙 Axios interceptor 이용한 request, response 커스텀
1. request 설정 : api 요청하기 성공 직전, 에러 직전 가로채기
2. response 설정 : api 응답 받고 이에 대한 then, catch 처리 직전 가로채기
// 요청 인터셉터 추가
axios.interceptors.request.use(
function (config) {
// config에는 axios요청시 입력한 config가 들어있습니다.
// config를 가공해서 요청하는 것이 가능합니다 !
// 요청을 보내기 전에 수행할 일
// ...
return config;
},
function (error) {
// 오류 요청을 보내기전 수행할 일
// ...
return Promise.reject(error);
});
// 응답 인터셉터 추가
axios.interceptors.response.use(
function (response) {
// 응답 데이터를 가공
// ...
return response;
},
function (error) {
// 오류 응답을 처리
// ...
return Promise.reject(error);
});
해당 프로젝트에서는 Bearer Token 인증/accessToken이 필요한 axios에 대해서만 interceptor을 사용함
요청 직전 처리 :
헤더에 Bearer Token 지정
응답 직전 처리 :
accessToken 만료로 인해 응답 catch 발생 전 refresh 토큰을 받아와 다시 헤더 설정해줌
비정상적인 로그인 상태와 bearer token 사용 api에 비정상적인 응답에 대해 특정 페이지로 이동해 유저의 정상적인 행동 유도
💙 커스텀 훅 + Axios interceptor 커스텀한 axios instance 사용
1. usePrivateAxios 훅 작성
2. usePrivateAxios 훅을 통해 컴포넌트에서 해당 axios instance 사용
3. 컴포넌트에 훅으로 전달받은 axios instance 사용해 api 통신
'이상청' 카테고리의 다른 글
이상청 : OpenGraph Protocol 사용한 SEO 처리 (단순링크, 트위터 공유) (0) | 2022.08.08 |
---|---|
이상청 : CSS Position과 Canvas, html link를 사용한 곰돌이 아바타 (0) | 2022.08.08 |
이상청 : 미디어쿼리와 useWindowWidth() 이용한 반응형 웹페이지 (0) | 2022.08.08 |
이상청 : Recoil 사용한 비동기적 상태관리 & 사용자 경험 향상 (0) | 2022.08.07 |
이상청 : Github actions 이용한 AWS 배포 CI/CD (0) | 2022.08.06 |