Соблюдает ли Angular Tutorial и его веб-API в памяти правильную семантику PUT? - PullRequest
0 голосов
/ 02 мая 2019

Я читал учебник по Angular и заметил использование Веб-API в памяти . Все круто, кроме кода в методе PUT heros , мне неудобно.

Вот оно:

private heroesUrl = 'api/heroes';
...

/** PUT: update the hero on the server */
updateHero (hero: Hero): Observable<any> {
  return this.http.put(this.heroesUrl, hero, httpOptions).pipe(
    tap(_ => this.log(`updated hero id=${hero.id}`)),
    catchError(this.handleError<any>('updateHero'))
  );
}

Следует отметить, что запрос PUT выполняется на this.heroesUrl, а не this.heroesUrl/hero.id. Из моего понимания при реализации CRUD через http, PUT должен быть сделан на URL ресурса.

Правильно ли мое понимание PUT?

В приведенном выше коде это работает, потому что id для героя для обновления - hero.id, который является частью hero объекта, отправленного через PUT

Для этой простой модели героя базовый API генерируется автоматически с помощью пакета Web-API *1024* в памяти для данного руководства.

Если так, In-memory Web API генерирует правильную семантику PUT?

1 Ответ

0 голосов
/ 02 мая 2019

Я бы согласился с вами согласно википедии определения.

this.heroesUrl - это ссылка на коллекцию героев .Определение википедии для таких ресурсов:

Замените все представления ресурсов-членов ресурса коллекции на представление в теле запроса или создайте ресурс коллекции, если он не существует.

Это означает, что при вызове this.heroesUrl мы хотим заменить коллекцию другой коллекцией.Это неверно, потому что они обновляют только одного героя и выбирают его, посмотрев на тело.

Было бы лучше использовать this.heroesUrl/${hero.id}, в этом случае мы обновляемконкретный ресурс.Определение в википедии для этого:

Замените все представления ресурса-члена или создайте ресурс-член, если он не существует, представлением в теле запроса.

Вы можете открыть отчет об ошибке в угловом репозитории github , они обычно довольно быстро меняют такие вещи / приводят причины, почему они так поступили.

...