81 lines
1.7 KiB
Markdown
81 lines
1.7 KiB
Markdown
# API Client
|
|||
|
|
|
||
|
|
## Basic Usage
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import { apiClient, safeRequest, classroomio } from '$lib/utils/services/api';
|
||
|
|
|
||
|
|
// GET request
|
||
|
|
const result = await safeRequest(async () => {
|
||
|
|
return apiClient.request('/api/users', { method: 'GET' });
|
||
|
|
});
|
||
|
|
|
||
|
|
// POST request
|
||
|
|
const result = await safeRequest(async () => {
|
||
|
|
return apiClient.request('/api/users', {
|
||
|
|
method: 'POST',
|
||
|
|
body: { name: 'John', email: 'john@example.com' }
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
// Handle response
|
||
|
|
if (result.success) {
|
||
|
|
console.log('Data:', result.data);
|
||
|
|
} else {
|
||
|
|
console.error('Error:', result.error.message);
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Error Handling
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
if (result.success) {
|
||
|
|
// Success
|
||
|
|
console.log(result.data);
|
||
|
|
} else {
|
||
|
|
// Check error type
|
||
|
|
if (result.error.error_code === 'auth') {
|
||
|
|
window.location.href = '/login';
|
||
|
|
} else if (result.error.error_code === 'client') {
|
||
|
|
showError('Please check your input');
|
||
|
|
} else if (result.error.error_code === 'server') {
|
||
|
|
showError('Server error, please try again');
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Custom Fetch
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import { createApiClient } from '$lib/utils/services/api';
|
||
|
|
|
||
|
|
const customClient = createApiClient({
|
||
|
|
customFetch: (input, init) => {
|
||
|
|
// Your custom fetch logic
|
||
|
|
return fetch(input, init);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
const result = await safeRequest(async () => {
|
||
|
|
return customClient.request('/api/data', { method: 'GET' });
|
||
|
|
});
|
||
|
|
```
|
||
|
|
|
||
|
|
## RPC Usage
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import { classroomio } from '$lib/utils/services/api';
|
||
|
|
|
||
|
|
// Use with Hono RPC
|
||
|
|
const data = await classroomio.users.$get();
|
||
|
|
const user = await classroomio.users.$post({ json: { name: 'John' } });
|
||
|
|
```
|
||
|
|
|
||
|
|
## Error Codes
|
||
|
|
|
||
|
|
- `'auth'` - 401 Unauthorized
|
||
|
|
- `'client'` - 400-499 Client errors
|
||
|
|
- `'server'` - 500-599 Server errors
|
||
|
|
- `'timeout'` - 408 Request timeout
|
||
|
|
- `'network'` - 0 Network issues
|