Utility API 구성하기(Configuring Utility APIs)
Utility API는 확장(extension)이므로, 선택적으로 구성 가능성(configurability)을 덧붙일 수 있고 다른 확장이 자신을 붙이는 입력(input)도 가질 수 있어요. 이 섹션에서는 그러한 utility API의 소비자로서 그것을 활용하는 방법을 설명해요.
출처: 문서
본문
Utility API는 확장(extension)이므로, 선택적으로 구성 가능성(configurability)을 덧붙일 수 있고 다른 확장이 자신을 붙이는 입력(input)도 가질 수 있어요. 이 섹션에서는 그러한 utility API의 소비자로서 그것을 활용하는 방법을 설명해요.
구성하기(Configuring)
Utility API 확장을 구성하려면 먼저 그 ID를 알아야 해요. 그 ID는 API ref ID로 구성돼요. 자세한 내용은 명명 패턴 문서를 확인하세요.
만들기(creating) 섹션의 예시 work API는 api:plugin.example.work라는 ID를 가질 거예요. 그것과 다른 모든 확장을 app-config의 app.extensions 섹션 아래에서 구성해요.
예: app-config.yaml 또는 app-config.production.yaml
app:
extensions:
- api:plugin.example.work:
config:
goSlow: false
- # ... other extensions
extensions가 목록이라는 점(앞의 -에 주의)과, api:plugin.example.work 항목이 객체라서 config 키가 그 아래에 들여써져야 한다는 점을 기억하는 게 중요해요. 이 두 가지를 제대로 맞추지 않으면 애플리케이션이 올바르게 시작되지 않을 수 있어요.
확장 구성 스키마가 지원하는 매개변수를 알려줘요. 여기서는 goSlow 확장 구성 값을 재정의해 기본값을 대체해요.
입력에 확장 붙이기
다른 확장 유형과 마찬가지로, 그 attachment의 attachTo 섹션이 Utility API의 ID와 입력 이름을 가리키도록 선언해 Utility API에 입력 attachment를 추가해요.
입력을 지원하는 잘 작성된 확장에는 종종 그러한 attachment를 만드는 데 도움이 되는 확장 생성자 함수가 있어요. 그 함수들은 보통 attachTo 섹션을 대신 올바르게 설정해 줘서 직접 알아내지 않아도 돼요.
Utility API 구현 교체하기
다른 확장 유형과 마찬가지로, Utility API를 확장 오버라이드(extension overrides)를 사용해 여러분만의 커스텀 구현으로 교체할 수 있어요.
Utility API는 원래 그 API를 제공한 플러그인의 모듈로만 오버라이드할 수 있다는 점을 알아두세요. 다른 플러그인이나 다른 플러그인의 모듈로 API를 오버라이드하려고 하면 충돌 오류가 발생해요.
앱에서:
import { createFrontendModule } from '@backstage/frontend-plugin-api';
class CustomWorkImpl implements WorkApi {
/* ... */
}
const workModule = createFrontendModule({
pluginId: 'work',
extensions: [
ApiBlueprint.make({
params: {
factory: createApiFactory({
api: workApiRef,
factory: () => new CustomWorkImpl(),
}),
},
}),
],
});
// Remember to pass the overrides to your createApp
export default createApp({
features: [
// ... other features
workModule,
],
});
이 예시에서 오버라이딩 확장은 최소로 유지했지만, 다른 확장과 마찬가지로 deps, 구성 가능성, 입력도 가질 수 있어요. 그에 대한 자세한 내용은 만들기(Creating) 섹션을 확인하세요.
교체용 확장을 만들 때는, 일반적으로 해당하는 경우 그 확장 구성 스키마나 입력 형태를 모방하고 싶을 거예요. 그러면 앱에 끼워 넣기가 더 쉬워져요. 원래 확장과 같은 방식으로 확장성에 응답하기 때문이에요.