Angular의 HTTP 요청
HTTP 요청
Angular는 http 요청을 처리하는 자체 모듈을 제공합니다.
이를 사용하려면 app.module.ts 파일에서 HttpClientModule 모듈을 가져온 다음 http 모듈을 사용하려는 서비스 또는 모듈에서 서비스 HttpClient를 가져와야 합니다.
Angular의 http 모듈은 Observable 객체를 반환하므로 요청 결과를 사용하려면 데이터에 액세스하기 위해 subscribe 메서드를 사용해야 합니다.
fetchProduct() {
this.productsService.getAllProducts().subscribe((products) => {
this.products = products;
});
}
메서드 이름 옆에 원하는 유형을 선언하여 http 요청의 응답을 쉽게 매핑할 수 있습니다.
getAllProducts() {
return this.http.get<Product[]>(environment.url_api);
}
이전 접근 방식은 많은 시나리오에 적용될 수 있습니다.
GET 메서드
getProduct(id: string) {
return this.http.get<Product>(`${environment.url_api}${id}`);
}
POST 방식
export interface Product {
id: string;
title: string;
price: string;
images: string[];
description: string;
category: Category;
}
export interface CreateProductDTO extends Omit<Product, 'id'. 'category'> {
categoryId: number;
}
createProduct(body: CreateProductDTO) {
return this.http.post<Product>(environment.url_api, body);
}
PUT PATCH 방법
export interface UpdateProductDTO extends Partial<CreateProductDTO> {
}
updateProduct(id: string, body: UpdateProductDTO) {
return this.http.put<Product>(`${environment.url_api}${id}`, data);
}
DELETE 메서드
deleteProduct(id: string) {
return this.http.delete<boolean>(`${environment.url_api}${id}`);
}
URL 매개변수
getProductsByPage(limit: number, offset: number) {
return this.http.get<Products[]>(`${environment.url_api}`, {
params : { limit, offset }
});
}
다음과 같이 HttpParams 클래스를 사용하여 프로그래밍 방식으로 매개 변수를 만들 수도 있습니다.
getProductsByPage(limit?: number, offset?: number) {
let params = new HttpParams();
if (limit && offset){
params = params.set('limit', limit);
params = params.set('offset', offset)
}
return this.http.get<Products[]>(`${environment.url_api}`, {
params
});
}
HTTP 응답 입력
인터페이스를 사용하여 API에서 오는 응답에 유효한 데이터 유형을 할당할 수 있습니다. 이는 특정 형식 문제를 방지하는 좋은 방법입니다.
HTTP 응답을 입력하는 방법을 보여주는 예로 다음 인터페이스에 주목해 보겠습니다.
interface User {
gender: string;
email: string;
phone: string;
}
사용자 인터페이스는 다음과 같이 사용할 수 있습니다.
myFunction(): Observable<User[]>{
return this.http.get("URL").pipe(
map(
(response:any) => response.results as User[]
))
}
오류 처리
this.http.get().pipe(
retry(3), // try again 3 times
catchError((error: HttpErrorResponse) => {
// error.status HttpStatusCode
return throwError("mensaje de error");
})
//normal flow
);
오류 발생을 즉시 방지하기 위해 재시도 연산자를 사용합니다. 대신 3번 시도하고 성공하지 못한 경우 catchError 연산자를 호출하여 예외를 처리합니다.
파일 다운로드
getFile(){
return this.http.get('URL.txt', {responseType:'text'})
.subscribe(content => {})
}
구독 방법 내에서 창을 여는 방법이나 다른 기능을 처리하여 파일을 저장하는 기능을 사용할 수 있습니다.
인터셉터
인터셉터는 토큰 주입 또는 헤더 추가와 같이 HTTP 요청에 속성을 추가하는 데 사용되는 사용자 지정 서비스입니다.
인증 인터셉터를 만드는 단계
// auth.interceptor.ts
export class AuthInterceptor implements HttpInterceptor {
intercept(
request: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
request = request.clone({
setHeaders: {
myToke: "1234",
},
});
return next.handle();
}
}
// app.module.ts
import { HTTP_INTERCEPTORS } from "@angular/common/http";
//import AuthInterceptor
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi: true,
},
];
참고: 인터셉터를 사용하여 토큰을 저장하려면 localStorage보다 indexDb를 사용하여 저장하는 것이 좋습니다.
데이터를 저장하기 위해 localStorage 또는 다른 로컬 기술에 토큰이나 일부 값을 저장하려는 경우 다음과 같이 진행할 수 있습니다.
loginRestAPI(email:string, password: string){
return this.http.post('URL',{email, password}).pipe(tap(dat) => {
//store in local storage or any other strategy
});
}
최신 버전의 Angular에서는 ng g 인터셉터 auth 명령을 사용하는 것이 좋습니다.
Reference
이 문제에 관하여(Angular의 HTTP 요청), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cyberdelahoz95/http-requests-in-angular-4ngi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)