name: frontend-angular-api-service description: Use when creating API services for backend communication with proper patterns for caching, error handling, and type safety. infer: true allowed-tools: Read, Write, Edit, Grep, Glob, Bash
Angular API Service Development Workflow
Use when creating/modifying API services extending PlatformApiService for backend communication.
Decision Tree
What kind of API service?
├── Standard CRUD → extend PlatformApiService + get/post/put/deleteRequest
├── With caching → + enableCache option in get() calls
├── File upload/download → + postFormData() / getBlob()
├── External API → + override getDefaultHeaders()
├── Search/autocomplete → + debounce in component, cache short-lived
└── Validation endpoint → return Observable<boolean>
Workflow
- Search existing services:
grep "{Feature}ApiService" --include="*.ts" - Read references (see Read Directives below)
- Define DTOs: request interfaces, response interfaces, command interfaces
- Create service extending
PlatformApiServicewith@Injectable({ providedIn: 'root' }) - Implement
apiUrlgetter usingenvironment.apiUrl + '/api/{Controller}' - Add query methods (get), command methods (post/put/delete), validation methods
- Verify checklist below
Key Rules
- Always extend
PlatformApiService(never useHttpClientdirectly) - Use
environment.apiUrlfor base URL (never hardcode) - All methods must have return type annotations:
Observable<T> - Define DTOs for all request/response types
- Use
{ enableCache: true, cacheKey, cacheDurationMs }for cacheable endpoints - File uploads use
postFormData(), downloads usegetBlob() - Error handling done in component via
tapResponse(), not in service
File Location
src/Frontend/libs/apps-domains/src/lib/{domain}/services/{feature}-api.service.ts
⚠️ MUST READ Before Implementation
IMPORTANT: You MUST read these files before writing any code. Do NOT skip.
- ⚠️ MUST READ
.claude/skills/shared/angular-design-system.md— platform-core imports - ⚠️ MUST READ
.claude/skills/frontend-angular-api-service/references/api-service-patterns.md— CRUD, caching, upload, search patterns - ⚠️ MUST READ target app design system:
docs/design-system/07-technical-guide.md
Anti-Patterns
constructor(private http: HttpClient)- must extendPlatformApiService- Hardcoded URLs:
this.get('https://api.example.com/...')- useenvironment - Missing return type:
getUser(id)- must begetUser(id): Observable<UserDto> - Untyped response:
this.get('/users')- must bethis.get<UserDto[]>('/users') - Error handling in service - let component handle via
tapResponse()
Verification Checklist
- Extends
PlatformApiService -
apiUrlgetter returnsenvironment.apiUrl + '/api/{Controller}' - All methods have
Observable<T>return type - DTOs defined for request/response types
- Caching configured for stable lookup endpoints
- File operations use
postFormData/getBlob -
@Injectable({ providedIn: 'root' })decorator
IMPORTANT Task Planning Notes
- Always plan and break many small todo tasks
- Always add a final review todo task to review the works done at the end to find any fix or enhancement needed