Angular API Service Development Workflow
Use when creating/modifying API services extending PlatformApiService for backend communication.
Decision Tree
code
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
code
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