본문 바로가기

개발 일지/토이 프로젝트

API 분석 - GET 요청 시 필요한 데이터만 필터링하기

문제

const getData = await axios
	.get(
	  `${BASE_URL}/${METHOD}?page=1&perPage=1500&serviceKey=${SERVICE_KEY}`,
	)
	.then((res) =>
	  res.data.data.filter(
	    (list: any) => parseInt(list.RCEPT_ENDDE.split('-').join('')) >= today,
	  ),
);

 

  • 기존 구조: API를 이용해서 1500개에 달하는 전체 데이터를 불러온 이후에 필요한 데이터만 필터링하면 3개밖에 남지 않는다.
  • 3개의 데이터를 위해 1500개의 데이터를 모두 불러와야 하는 비효율적 구조.

원인

이러한 문제는 API문서를 꼼꼼하게 읽어보지 않은 것에서 발생됐다.

차근차근히 위에서 부터 읽어내려가다 [요청 메시지 명세] 라는 것을 찾았다.

a) 요청 메시지 명세

항목명(영문) 항목명(국문) 항목크기 항목구분 샘플데이터 항목설명

house_manage_no 주택관리번호 10 0 (EQ) 2022000248 (Equal) 주택관리번호
pblanc_no 공고번호 10 0 (EQ) 2022000248 (Equal) 공고번호
subscrpt_area_code_nm 공급지역명 500 0 (EQ) 서울 (Equal) 공급지역명
rcrit_pblanc_de 모집공고일 10 0 (LT) (Little)                  < ‘YYYY-MM-DD’
(LTE)          
2022-05-31 (Little or Equal)         <= ‘YYYY-MM-DD’        
(GT) (Greater)                  > ‘YYYY-MM-DD’        
(GTE)          
2022-01-01 (Greater or Equal)         >= ‘YYYY-MM-DD’        

※ 항목구분 : 필수(1), 옵션(0), 1건 이상 복수건(1..n), 0건 또는 복수건(0..n)

요청 메시지 예제를 보면서 URL 하나하나씩 끊어서 보니 답이 나왔다.

https://api.odcloud.kr/api/ApplyhomeInfoDetailSvc/v1/getAPTLttotPblancDetail?page=1&perPage=10&cond[HOUSE_MANAGE_NO%3A%3AEQ]=2022000248&cond[PBLANC_NO%3A%3AEQ]=2022000248&cond[SUBSCRPT_AREA_CODE_NM%3A%3AEQ]=서울&cond[RCRIT_PBLANC_DE%3A%3ALTE]=2022-05-31&cond[RCRIT_PBLANC_DE%3A%3AGTE]=2022-01-01&serviceKey=서비스키

 

해결

<https://api.odcloud.kr/api/ApplyhomeInfoDetailSvc/v1/getAPTLttotPblancDetail?page=1&perPage=10>

&cond%5B

HOUSE_MANAGE_NO%3A%3AEQ%5D=2022000248

&cond%5B

PBLANC_NO%3A%3AEQ%5D=2022000248

&cond%

5BSUBSCRPT_AREA_CODE_NM%3A%3AEQ%5D=%EC%84%9C%EC%9A%B8

&cond%5B

RCRIT_PBLANC_DE%3A%3ALTE%5D=2022-05-31

&cond%5B

RCRIT_PBLANC_DE%3A%3AGTE%5D=2022-01-01

&serviceKey=서비스키

위의 예제를 쪼개보니 요청메시지를 적절하게 활용하면 굳이 모든 데이터를 받지 않아도 된다는 것이다 !!!

그래서 나는 2023년 1월 1일 이후에 모집공고한 것들만 데이터를 받아보고 싶어

<https://api.odcloud.kr/api/ApplyhomeInfoDetailSvc/v1/getAPTLttotPblancDetail?page=1&perPage=10>

&cond%5B

RCRIT_PBLANC_DE%3A%3AGTE%5D=2023-01-01

&serviceKey=서비스키

이렇게 요청했더니

2023년 이후 모집공고한 딱 5개의 데이터만 받을 수 있었다.

이렇게하여 클라이언트 사이드에서 굳이 필터를 할 일도 없고 더 빨리 데이터를 받아 올수 있게 되었다.