Angular Должен ли я создавать сервис для каждой сущности?

В моем угловом приложении я хочу включать токен пользователя в каждый из моих http-запросов, поэтому для того, что я узнал, лучше всего создать службу, чтобы мне не приходилось вручную включать свой токен или другой параметр каждый раз для моего http-запроса. Код может быть таким:

export class FacilityService{
  constructor(private http: HttpClient) {
  }
  const httpOptions = {
    header: new HttpHeaders({
    Authorization: `bearer ` + JSON.parse(localStorage.GetItem('user')).token
    })
  }
  

  load(): Observable<any> {
    return this.http.get<any>(
      `${environment.rootUrl}/facility/getFacility`, httpOptions
    );
  }
}

Однако я также научился использовать службу для хранения состояния. Таким образом, нам не нужно каждый раз запрашивать у сервера. Код может понравиться так:

export class FacilityService{
  facility: Facility[] = [];

  constructor(private http: HttpClient) {
  }
  const httpOptions = {
    header: new HttpHeaders({
    Authorization: `bearer ` + JSON.parse(localStorage.GetItem('user')).token
    })
  }
  

  load(): Observable<any> {
    if (this.facility.length > 0) return of(this.facility);
    return this.http.get<any>(
      `${environment.rootUrl}/facility/getFacility`, httpOptions
    ).pipe(map(facility => 
                 this.facility = facility;
                 return facility;
          ));
  }
}

2 вопрос:

  1. если я предполагаю создать локальное состояние для всех HTTP-запросов всех моих объектов? Каждый раз, когда я сначала проверяю локальные данные, и если они не существуют, я запрашиваю их у сервера. И у меня будет обслуживание объектов, обслуживание пользователей, обслуживание заказов.

  2. Как мне объединить все эти службы в одну службу, чтобы мне не приходилось создавать службу для каждой из моих сущностей? например, данные о пользователях и данные о заказах также могут совместно использоваться сервисом.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, если вам нужно добавить заголовок или что-то еще в КАЖДЫЙ HTTP-запрос, я бы создал перехватчик; не использовать какой-либо родительский сервис.

если я предполагаю создать локальное состояние для всех HTTP-запросов всех моих объектов? Каждый раз, когда я сначала проверяю локальные данные, и если они не существуют, я запрашиваю их у сервера.

Как правило, я бы отделил управление состоянием от кода интеграции службы, чтобы мой код для доступа к удаленным серверам не сохранял никакого состояния.

Для локального кэширования существуют некоторые типы данных, для которых имеет смысл кэшировать данные локально, и другие типы данных, для которых это никогда не требуется. Для тех, кому это нужно, вы можете использовать наблюдаемое в сервисе и shareReplay().

Как мне объединить все эти службы в одну службу, чтобы мне не приходилось создавать службу для каждой из моих сущностей? Например, данные пользователей и данные о заказах также могут совместно использоваться сервисом.

Я рекомендую создать отдельный сервис для всех сущностей. Скорее всего, данные пользователей и данные о заказах представляют собой разные схемы данных с разными конечными точками, и я не уверен, какие вещи будут «разделяться» между ними, если они еще не инкапсулированы в класс HTTPClient Angular.

Могу ли я также спросить, что является наилучшей практикой, если я хочу отправить идентификатор пользователя и текущий идентификатор объекта в каком-либо HTTP-запросе? Вручную добавлять в мой сервис каждый раз?

o i 17.10.2022 05:14

Другие вопросы по теме