2016-12-02 2 views
1

http 서비스를 사용하는 올바른 방법이 무엇인지 궁금합니다. 예를 들어 서버에 대한 모든 내 요청은 /Api으로 시작합니다. 매번 this.http.get('/Api/SomeRoute/:id')으로 작성해야합니까, 아니면 더 세련된 방법으로 Api을 생략해도됩니까?Angular 2 HTTP 서비스 구성

http을 사용하는 다른 managerService을 만들어야하나요?

+0

구성 파일 (json)을 만들고 거기에 루트 URL을 넣으십시오. – Mehari

답변

3

과 같은 끝점은 일반적으로 구성 파일의 좋은 예입니다.

내 2 각도 응용 프로그램에서 나는 그것에 대한 의존성 주입을 사용합니다.

import { OpaqueToken } from '@angular/core'; 

export interface IAppConfig { 
    appTitle: string; 
    endpointUrl: string; 
}; 

export const CONFIG: IAppConfig = { 
    appTitle: 'MyApp', 
    endpointUrl: 'http://api.myrealservice.com/' 
}; 

export const LOCALCONFIG: IAppConfig = { 
    appTitle: 'MyApp (LOCAL)', 
    endpointUrl: 'http://localhost:8080/api/' 
}; 

export let APP_CONFIG = new OpaqueToken('app.config'); 

당신은 (지역 개발 또는 생산 등을위한 예를 들어) 여러 CONFIGS을 가질 수 있습니다이 방법 및 정의 :이 경우 내가 OpaqueToken를 사용하여 app.config.ts 같은 그것은 주사 확인해야 이 같은 모듈의 공급자로 : 내가 그것을 필요로 어디에 있든지

providers: [ 
    ..., 
    { 
     provide: APP_CONFIG, 
     useValue: CONFIG 
    }, 
    ... 
] 

그럼 난 그냥 백엔드 서비스, 예를 들어,이 설정을 주입 endpointUrl 사용하기 :

... 
constructor(@Inject(APP_CONFIG) private _config:Config) { 
    console.log(this._config.endpointUrl); 
} 

은 모듈에서 당신은 당신이 (이 예 예를 들어 CONFIG 또는 LOCALCONFIG에서)를 제공 할 구성의 종류를 변경할 수 있습니다 더 이상 다른 곳을 변경할 필요가 없습니다.

희망이 도움이됩니다. 편집 한 후


, 당신은 두 번째 질문 을 추가 아니면 HTTP를 사용하는 다른 managerService를 작성해야합니까? :

짧은 대답 : 예. 가능한 한 구성 요소, 서비스 등의 논리를 분리해야합니다.

고양이와 개에 관한 정보를 제공하는 API가 있다고 가정 해 보겠습니다. 프론트 엔드에서 원하는 것은 무엇이든 원하는대로 CatService, DogServiceBackendService 또는 ApiService 일 것입니다.

CatServiceDogService은보기 구성 요소가 상호 작용할 항목입니다. 예를 들어 getCatById() 또는 그와 비슷한 메소드가 있습니다.이러한 서비스는 대부분 012 타월 서비스 인 BackendService과 상호 작용하며 Http을 삽입하고 post(), get() 등과 같은 일반적인 방법을 사용합니다.

귀하의 은 특정 URL을 알고 응답 또는 오류를 처리하고 결과가 포함 된 호출 서비스로 다시보고하는 반면 다른 것들은 파이프 라인으로 사용되어 특정 비즈니스 논리를 처리해야하는 사람입니다 .

0

맞습니다. 반복되는 값을 변수에 넣는 것이 좋습니다.

const apiUrl = '/Api/'; 

을하고 URL의 변경이있는 경우 다음, 당신은 하나 개의 장소에 변경하고 또한 당신의 코드는 청소기 모양 : 당신은 const에서 기본 URL을 넣을 수 있습니다. 사용법은 다음과 같습니다 :

this.http.get(apiUrl + 'SomeRoute/:id') 

당연히 당신을위한 기능을 만들 수도 있지만 너무 추상적입니다.

관련 문제