최근에 외부 api를 이용하는 업무를 맡게 됐다. 문서만 잘 되어 있다면 사용하는 것은 그리 크게 어렵지 않은 일이다. 이번에도 다르지 않았다.
이번에는 다음의 세 가지의 api를 사용했다.
// api.js
const URL = "https://api.com";
const encodeHeaders = {
Content-Type: "application/x-www-form-urlencoded",
}
export const getToken = async () => {
const response = await fetch(`${URL}/token`, {
method: "POST",
headers: encodeHeaders,
body: {
apikey: API_KEY,
userid: USER_ID,
}
});
const result = await response.json();
return result.token;
}
export const getList = async (idx) => {
const token = await getToken();
const response = await fetch(`${URL}/list`,{
method: "POST",
headers: encodeHeaders,
body: {
apikey: API_KEY,
userid: USER_ID,
token,
}
})
const result = await response.json();
return result.list[idx]
}
export const sendSMS = async ({arg1, arg2}) => {
const parsedData = parseArgs({arg1, arg2});
const response = await fetch(`${URL}/sms`, {
method: "POST",
headers: encodedHeaders,
body: {
apikey: API_KEY,
userid: USER_ID,
token,
data: parsedData,
}
})
const result = await response.json();
}
하루 만에 빠르게 업무를 처리한 후 나와 같은 API를 이용해서 사용하는 종택님과 코드를 비교하면서 같이 보게 됐다. 그러다 axios의 엄청난 기능을 만나게 됐다!
나에게 axios는 여러 많은 굳이? 중 하나 였다. fetch로도 다 구현할 수 있는데 굳이 axios를 써야 하나? 하지만 나는 생각하지 못했다... 굳이 axios를 사용하는 이유가 있지 않을까?
이번주에도 거의 2천만명이 다운 받아 사용했네...
api call에 대한 instance를 생성해서 하나의 instance로 여러 번의 요청을 관리할 수 있게 된다.
const instance = axios.create({
baseURL: BASE_URL, // "https://api.com"
headers: encodeHeaders,
data: {
apikey: API_KEY,
userid: USER_ID,
}
})
인스턴스에 기본 base url와 headers와 공통된 body가 정의되어 있으므로 이후에는 end point만 추가하면 된다. data는 body에 담을 데이터가 들어 간다.
export const getToken = async () => {
const response = await instance.post("/token");
const result = await response.json();
instance.defaults.data = {...instance.defaults.data, token: result.token}
}
export const getList = async (idx) => {
const response = await instance.post("/list")
const result = await response.json();
if(result.list){
return result.list[idx];
}
}
export const sendSMS = async ({arg1, arg2}) => {
const parsedData = parseArgs({arg1, arg2});
const response = await axios.post('/sms', { data: parsedData })
const result = await response.json();
}
아직 axios의 더 다양한 기능을 사용해보진 못했지만 여태 왜 axios를 안썼나 싶었을 정도로 정말 유용하다.
이전 회사에서 오랫동안 1인 개발을 하다 보니 효율적인 코드를 짜는 것보다는 익숙한 방법과 코드로 빠르게 업무를 처리하기에 급급했던 것 같다.
감사합니다