Как реализовать общий интерфейс для нескольких API?

Я завершил реализацию RestAPI для своего приложения. Теперь я пытаюсь разработать внешнее приложение с помощью Angular. Каждый RestAPI возвращает отдельный объект JSON. Вместо того, чтобы реализовывать каждый вызов отдельного RestAPI для каждого http-запроса, есть ли способ реализовать один единственный интерфейс для красивых вызовов RestAPI? В частности, в следующем,

this.http.get('http://a.b.c/api/people/1').subscribe(json => makePerson(json));
this.http.get('http://a.b.c/api/animal/1').subscribe(json => makeAnimal(json));
this.http.get('http://a.b.c/api/flower/1').subscribe(json => makeFlower(json));

Здесь есть два разных метода, но могу ли я создать один интерфейс, чтобы охватить эти 3 вызова метода, передав URL-адрес API и имя класса?

this.call_restapi(url, 'Person');
this.call_restapi(url, 'Animal');
this.call_restapi(url, 'Flower');

Не могли бы вы дать некоторое представление об этом?


person Anna Lee    schedule 29.12.2017    source источник


Ответы (1)


Вы можете добавить оператор switch в свой подписчик и использовать аргумент для навигации по запросу GET и оператору switch.

  get(type: string) {
    const url: string = 'http://a.b.c/api/' + type + '/1';
    this.http.get(url).subscribe(
    (json) => {
      switch(type) {
        case('people'):
          this.makePerson(json));
          break;
        case('animal'):
          this.makeAnimal(json));
          break;
        case('flower'):
          this.makeFlower(json);
          break;
        default:
          break;
      }

    });
  }
person Iancovici    schedule 29.12.2017
comment
Ух ты! Чтобы пойти дальше, есть ли способ справиться с этим без каких-либо ограничений, таких как любое правило? я имею в виду, что я не хочу помещать какое-либо правило в URL-адрес API. Я просто хочу получить объект JSON из того же URL-адреса API, который был передан. Вопрос в этом вопросе более актуален тем, что есть способ динамически создавать объект с переменными? - person Anna Lee; 29.12.2017
comment
Я так не думаю, но если предположить, что это возможно, это не похоже на идеальное решение, потому что это может привести к чрезмерно сложной обработке. Может быть, вы слишком много думаете о своей проблеме, какова реальная конечная цель? - person Iancovici; 29.12.2017
comment
Я думаю, что я создаю карту с ключом и значением, являющимся именем класса («люди», «животное», «цветок») и типом объекта (люди, животные, цветы) соответственно. Возвращенный объект JSON будет сопоставлен с соответствующим объектом в соответствии с переданным именем класса. Поэтому я хочу избежать реализации отдельного вызова RestAPI. Я хочу решить только одну функцию. Это странно? - person Anna Lee; 29.12.2017