HTTP: отправка данных на сервер¶
16.03.2023
Помимо получения данных с сервера, HttpClient поддерживает другие методы HTTP, такие как PUT, POST и DELETE, которые вы можете использовать для изменения удаленных данных.
Пример приложения для данного руководства включает сокращенную версию примера "Тур по героям", который извлекает героев и позволяет пользователям добавлять, удалять и обновлять их. В следующих разделах приведены примеры методов обновления данных из HeroesService примера.
Выполнить POST-запрос¶
Приложения часто отправляют данные на сервер с помощью POST-запроса при отправке формы. В следующем примере HeroesService делает HTTP POST-запрос при добавлении героя в базу данных.
1 2 3 4 5 6 7 | |
Метод HttpClient.post() похож на get() тем, что у него есть параметр type, который вы можете использовать для указания того, что вы ожидаете от сервера возврата данных заданного типа. Метод принимает URL ресурса и два дополнительных параметра:
| Параметр | Подробности |
|---|---|
| body | Данные для POST в теле запроса. |
| options | Объект, содержащий параметры метода, которые в данном случае определяют необходимые заголовки. |
Пример отлавливает ошибки, как описано выше.
Компонент HeroesComponent инициирует фактическую операцию POST, подписываясь на Observable, возвращаемую этим методом обслуживания.
1 2 3 | |
Когда сервер успешно отвечает с новым добавленным героем, компонент добавляет этого героя в отображаемый список heroes.
Выполните запрос DELETE¶
Это приложение удаляет героя с помощью метода HttpClient.delete, передавая ID героя в URL запроса.
1 2 3 4 5 6 7 8 | |
Компонент HeroesComponent инициирует фактическую операцию DELETE, подписываясь на Observable, возвращаемую этим методом службы.
1 | |
Компонент не ожидает результата от операции удаления, поэтому он подписывается без обратного вызова. Даже если вы не используете результат, вы все равно должны подписаться.
Вызов метода subscribe() исполняет наблюдаемую, что и инициирует запрос DELETE.
Вы должны вызвать subscribe(), иначе ничего не произойдет. Просто вызов HeroesService.deleteHero() не инициирует запрос DELETE.
1 2 | |
Выполните PUT-запрос¶
Приложение может отправлять PUT-запросы, используя клиентскую службу HTTP. Следующий пример HeroesService, как и пример POST, заменяет ресурс обновленными данными.
1 2 3 4 5 6 7 | |
Как и для любого из HTTP методов, возвращающих наблюдаемую, вызывающий HeroesComponent.update() должен subscribe() на наблюдаемую, возвращаемую из HttpClient.put(), чтобы инициировать запрос.
Добавление и обновление заголовков¶
Многие серверы требуют дополнительных заголовков для операций сохранения. Например, сервер может потребовать токен авторизации, или заголовок "Content-Type" для явного объявления MIME-типа тела запроса.
Добавить заголовки¶
Сервис HeroesService определяет такие заголовки в объекте httpOptions, который передается каждому методу сохранения HttpClient.
1 2 3 4 5 6 7 8 | |
Обновление заголовков¶
Вы не можете напрямую изменить существующие заголовки в предыдущем объекте options, потому что экземпляры класса HttpHeaders неизменяемы.
Вместо этого используйте метод set(), чтобы вернуть клон текущего экземпляра с новыми изменениями.
В следующем примере показано, как при истечении срока действия старого токена можно обновить заголовок авторизации перед выполнением следующего запроса.
1 2 3 4 | |