개발자
여러 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#1
2import { forkJoin, from } from 'rxjs';
3import { map, mergeMap, reduce } from 'rxjs/operators';
4
5const api1$ = from(fetch('https://api1.com').then(res => res.json()));
6const api2$ = from(fetch('https://api2.com').then(res => res.json()));
7const api3$ = from(fetch('https://api3.com').then(res => res.json()));
8
9forkJoin([api1$, api2$, api3$])
10 .pipe(
11 mergeMap(data => data),
12 reduce((acc, cur) => {
13 const { a, ...rest } = cur;
14 if (acc[a]) {
15 acc[a] = { ...acc[a], ...rest };
16 } else {
17 acc[a] = rest;
18 }
19 return acc;
20 }, {})
21 )
22 .subscribe(data => setMergedData(data));
23
24#2
25import { merge } from 'lodash';
26
27const api1 = fetch('https://api1.com').then(res => res.json());
28const api2 = fetch('https://api2.com').then(res => res.json());
29const api3 = fetch('https://api3.com').then(res => res.json());
30
31Promise.all([api1, api2, api3]).then(data => {
32 const mergedData = merge({}, ...data);
33 setMergedData(mergedData);
34});
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!