기존에 apiService.js 파일과 guildApiService.js 파일이 따로 있었는데
apiService.js에는 getApiResponse라는 api 조회 요청을 보내는 모듈을 만들어 뒀고,
guidlApiService.js에는 getApiResponse를 사용해서
getOguildId : 길드명, 월드명으로 oguild_id 조회
getGuildBasicData : oguild_id로 길드 정보 조회
getCharacterOcid : 캐릭터명으로 ocid 조회
getCharacterBasicData : ocid로 캐릭터 정보 조회
를 하는 모듈을 만들어 놨었다.
개발을 하면서 보니 불필요하게 코드가 다른 파일에 나누어져 있는 것 같아서 apiService라는 하나의 파일 안에 병합해서 작성해주었다.
// apiService.js
const configPath = path.join(__dirname, '../config/config.json');
const configData = fs.readFileSync(configPath, 'utf-8');
const config = JSON.parse(configData);
const API_KEY = config.apiKey;
const API_BASE_URL = "<https://open.api.nexon.com/maplestory/v1>";
const UNION_RANKING_ENDPOINT = "/ranking/union";
const currentDate = new Date();
currentDate.setDate(currentDate.getDate() - 1);
const formattedDate = currentDate.toISOString().split('T')[0];
async function getApiResponse(url) {
try {
const response = await axios.get(url, { headers: { "x-nxopen-api-key": API_KEY } });
@@ -17,6 +23,33 @@ async function getApiResponse(url) {
}
}
// 길드명, 월드명으로 oguild_id 조회
async function getOguildId(guild, worldName) {
const guildIdUrl = `${API_BASE_URL}/guild/id?guild_name=${encodeURIComponent(guild)}&world_name=${encodeURIComponent(worldName)}`;
return await getApiResponse(guildIdUrl);
}
// oguild_id로 길드 정보 조회
async function getGuildBasicData(oguildId) {
const guildDataUrl = `${API_BASE_URL}/guild/basic?oguild_id=${oguildId}&date=${formattedDate}`;
return await getApiResponse(guildDataUrl);
}
// 캐릭터명으로 ocid 조회
async function getCharacterOcid(characterName) {
const characterOcidUrl = `${API_BASE_URL}/id?character_name=${encodeURIComponent(characterName)}`;
return await getApiResponse(characterOcidUrl);
}
// ocid로 캐릭터 정보 조회
async function getCharacterBasicData(ocid) {
const characterDataUrl = `${API_BASE_URL}/character/basic?ocid=${encodeURIComponent(ocid)}&date=${formattedDate}`;
return await getApiResponse(characterDataUrl);
}
module.exports = {
getOguildId,
getGuildBasicData,
getCharacterOcid,
getCharacterBasicData,
};
어떤게 정답이라고 지금 내 수준에서 말하기는 어렵지만 비슷한 기능을 하는 모듈들을 한 파일에 묶어 놓으니 더 보기 편한 것 같다.