API Integration
HTTP Client
| Platform | Library | Alternative |
|---|---|---|
| Android | Retrofit + OkHttp | Ktor Client |
| iOS | URLSession (native) | Alamofire |
| Flutter | Dio | http package |
| React Native | Axios | fetch API |
Standar
- Base URL harus dikonfigurasi per environment (dev, staging, production).
- Interceptor / Middleware untuk: token injection, logging, error transformation.
- Timeout wajib dikonfigurasi:
- Connect timeout: 15 detik
- Read timeout: 30 detik
- Write timeout: 30 detik
- Retry otomatis untuk network error (max 3 kali dengan exponential backoff).
- Response harus di-parse ke DTO dan di-map ke Domain Model.
Base Response Format
Semua API harus menggunakan format response yang konsisten:
{
"status": true,
"message": "Success",
"data": { ... },
"meta": {
"page": 1,
"per_page": 20,
"total": 100
}
}
{
"status": false,
"message": "Validation failed",
"errors": {
"email": ["Email is required"],
"password": ["Password must be at least 8 characters"]
}
}
Pagination
Gunakan cursor-based atau offset-based pagination sesuai kebutuhan:
// TanStack Query v5 example (React Native)
// initialPageParam wajib sejak v5 — pageParam tidak lagi didefault via destructuring
const { data, fetchNextPage, hasNextPage } = useInfiniteQuery({
queryKey: ['users'],
queryFn: ({ pageParam }) => fetchUsers(pageParam),
initialPageParam: 1,
getNextPageParam: (lastPage) => lastPage.meta.nextPage,
});
Rate Limiting
Implementasi rate limiting / debouncing untuk endpoint yang sering dipanggil (search, auto-complete).