개발자
여러 API에서 데이터를 가져와 프론트엔드에서 하나의 상태로 처리하려는 상황입니다. 이 경우, 각 API의 컬럼이 다르더라도 프론트엔드에서 공통 컬럼들만 합치려고 합니다. 예를 들어: API1: a, b, c의 값 API2: a, d, e의 값 API3: a, f, g의 값 이걸 하나의 상태로 처리하고 싶으면 어떻게 하는 방법이 좋을까요???
답변 3
익명
작성자
2023년 04월 13일
시도해 보겠습니다! 감사합니다!
익명
작성자
2023년 04월 13일
좋은 의견 감사합니다!
여러 API에서 가져온 데이터를 합치는 방법은 여러 가지가 있습니다. 다음은 그 중 몇 가지 방법을 소개해드립니다. 1. Promise.all()을 사용하여 각 API에서 데이터를 가져와 합치는 방법 아래 예시에서는 각 API에서 데이터를 가져와서 Promise.all()을 사용하여 모든 API에서 가져온 데이터를 배열로 합친 후, reduce()를 사용하여 중복되는 데이터를 찾아 공통 컬럼만을 가지고 있는 하나의 객체로 합치는 방법을 사용하였습니다. 2. RxJS를 사용하여 각 API에서 데이터를 가져와 합치는 방법 아래 예시에서는 RxJS의 forkJoin()을 사용하여 각 API에서 데이터를 가져오고, mergeMap()을 사용하여 배열을 평면화한 후, reduce()를 사용하여 중복되는 데이터를 찾아 공통 컬럼만을 가지고 있는 하나의 객체로 합치는 방법을 사용하였습니다.
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 31 32 33 34
#1 import { forkJoin, from } from 'rxjs'; import { map, mergeMap, reduce } from 'rxjs/operators'; const api1$ = from(fetch('https://api1.com').then(res => res.json())); const api2$ = from(fetch('https://api2.com').then(res => res.json())); const api3$ = from(fetch('https://api3.com').then(res => res.json())); forkJoin([api1$, api2$, api3$]) .pipe( mergeMap(data => data), reduce((acc, cur) => { const { a, ...rest } = cur; if (acc[a]) { acc[a] = { ...acc[a], ...rest }; } else { acc[a] = rest; } return acc; }, {}) ) .subscribe(data => setMergedData(data)); #2 import { merge } from 'lodash'; const api1 = fetch('https://api1.com').then(res => res.json()); const api2 = fetch('https://api2.com').then(res => res.json()); const api3 = fetch('https://api3.com').then(res => res.json()); Promise.all([api1, api2, api3]).then(data => { const mergedData = merge({}, ...data); setMergedData(mergedData); });
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!