انگولار - چگونه چندین سرویس API را جستجو کنیم


من در حال توسعه یک موتور جستجو با انگولار ۲ هستم. بنابراین از API های چندین پلتفرم استفاده میکنم.

این کار میکند اگر تابع جستجو را بهطور دستی از هر سرویس API صدا بزنم.

اما آیا امکان انجام همین کار برای هر سرویس API وجود دارد؟

هر سرویس API یک عملکرد یکسان دارد:

search (query: string): Observable<Array<SearchResult>> { ... }

در رابط کاربری میخواهم نتایج را با زبانهها جدا کنم.

بنابراین هر سرویس API یک عنوان دارد:

public title: string = "the title";

برای ذخیره نتایج جستجو بهصورت محلی، من یک کلاس دارم که توسط هر سرویس API گسترش یافته است. این کلاس دارای توابع کمکی و غیره است.

پاسخ شماره ۱

بسته به رفتاری که نیاز دارید، میتوانید از merge، concat یا forkJoin برای ادغام چند جریان به یک جریان استفاده کنید.

کد تقریباً به همان شکل خواهد بود.

برای مثال استفاده از merge به منظور ادغام ۲ جریان به یک جریان.

اگر لیستی از api دارید باید برای جستجو تماس بگیرید. کد شما به این شکل خواهد بود.

let apis: string[] = [];

let observables = apis.map(api => search(api)); // get an array of observables

let merged = observables.reduce((previous, current) => previous.merge(current), new EmptyObservable()); // merge all obserbable in the list into one.

merged.subscribe(res => doSomething(res));

این مقاله ممکن است مفید باشد.