HttpClient¶
Практически любое клиентское приложение получает данные от удаленного сервера. Большинство современных API основаны на протоколе HTTP, поэтому "общение" с сервером Angular осуществляет через REST-подобные запросы. За это отвечает HttpClientModule.
После в компонент или сервис (в зависимости от построения архитектуры) импортируется сервис HttpClient.
1 2 3 4 | |
В архитектуре REST API в зависимости от назначения используются разные методы HTTP запросов. Основные — GET, POST, PUT и DELETE. Рассмотрим, как сделать средствами Angular HTTP запросы.
Все методы сервиса HttpClient возвращают тип Observable. Это означает, что если при вызове метода, который должен сделать HTTP-запрос, не вызвать метод subscribe(), то ничего не произойдет. Методу subscribe() можно передавать две функции-обработчика, первая выполнится в случае успешного ответа от сервера, вторая — в случае ошибки.
Пример Angular GET-запросов.
1 2 3 4 5 6 7 8 9 10 11 | |
Для задания GET-параметров get() в качестве второго аргумента передается конфигурационный объект со свойством params. Здесь же в объекте указываются и другие параметры, например, headers, в котором задаются заголовки ответа. Все параметры подробно рассмотрены далее.
Свойство params принимает экземпляр класса HttpParams, который предварительно импортируется.
1 | |
Передача значений осуществляется с помощью set(). Для передачи множества параметров используется следующая запись.
1 2 3 | |
Пример Angular POST-запроса.
1 2 3 4 5 6 7 | |
Метод post() принимает три аргумента. Второй — тело запроса, третьим параметром можно передаваться конфигурация.
Пример Angular PUT-запроса
1 2 3 4 5 6 7 | |
Метод put() во всем идентичен методу post(). Разница между ними состоит в том, что post() используется для создания новой записи, а put() — для ее обновления.
Пример Angular DELETE-запроса.
1 2 3 4 5 6 | |
delete() используется для удаления записи. В своем использовании он схож с GET. Оба метода не имеют тела запроса, а данные передают в строке запроса.
Теперь рассмотрим, какие свойства можно задать в конфигурации:
headers— принимает экземпляр классаHttpHeaders, который содержит указанные с помощью методаset(key: string, value: string)HTTP-заголовки; классHttpHeadersдолжен быть предварительно импортирован;params— принимает экземпляр классаHttpParams, который содержит указанные с помощью методаset(key: string, value: string)параметры строки запроса;reportProgress— указывает, необходимо ли при загрузке на сервер или скачивании с сервера данных передавать информацию о текущем состоянии; принимает либоtrue, либоfalse(по умолчаниюnull);responseType— указывает тип данных ответа ('arraybuffer' | 'blob' | 'json' | 'text'); по умолчанию'json';withCredentials— указывает, будут ли в запросе передаваться авторизационные данные пользователя; принимает либоtrue, либоfalse(по умолчанию).
Для получения исчерпывающих данных о процессе выполнения запроса в его параметрах необходимо установить reportProgress в true.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
Запросы такого рода реализуются через метод request(), а их состояние отслеживается с помощью объекта HttpEvent. В его свойстве type указывается тип текущего события (HttpTypeEvent).
Классификация HttpTypeEvent:
Sent— запрос был отправлен;ResponseHeader— получены код и заголовки ответа;UploadProgress— событие отправки данных (для POST и PUT);DownloadProgress— событие скачивания данных (для GET);User— событие отHttpInterceptorили сервера;Response— выполнение запроса завершено.