287 lines
5.0 KiB
Markdown
287 lines
5.0 KiB
Markdown
# SDS-03: API Design
|
|
|
|
## 1. API Overview
|
|
|
|
### 1.1 API Style
|
|
- **RESTful**: Resource-based API design
|
|
- **Versioning**: `/api/v1/` prefix
|
|
- **Content-Type**: `application/json`
|
|
- **Authentication**: JWT Bearer tokens
|
|
|
|
### 1.2 API Base URL
|
|
```
|
|
http://localhost:8080/api/v1
|
|
```
|
|
|
|
## 2. Authentication API
|
|
|
|
### 2.1 Endpoints
|
|
```
|
|
POST /auth/login
|
|
POST /auth/logout
|
|
GET /auth/me
|
|
```
|
|
|
|
### 2.2 Request/Response Examples
|
|
|
|
#### Login
|
|
```http
|
|
POST /api/v1/auth/login
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"username": "admin",
|
|
"password": "password"
|
|
}
|
|
|
|
Response: 200 OK
|
|
{
|
|
"token": "eyJhbGciOiJIUzI1NiIs...",
|
|
"user": {
|
|
"id": "uuid",
|
|
"username": "admin",
|
|
"email": "admin@example.com",
|
|
"roles": ["admin"]
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Get Current User
|
|
```http
|
|
GET /api/v1/auth/me
|
|
Authorization: Bearer <token>
|
|
|
|
Response: 200 OK
|
|
{
|
|
"id": "uuid",
|
|
"username": "admin",
|
|
"email": "admin@example.com",
|
|
"roles": ["admin"],
|
|
"permissions": ["storage:read", "storage:write", ...]
|
|
}
|
|
```
|
|
|
|
## 3. Storage API
|
|
|
|
### 3.1 ZFS Pools
|
|
```
|
|
GET /storage/zfs/pools
|
|
GET /storage/zfs/pools/:id
|
|
POST /storage/zfs/pools
|
|
DELETE /storage/zfs/pools/:id
|
|
POST /storage/zfs/pools/:id/spare
|
|
```
|
|
|
|
### 3.2 ZFS Datasets
|
|
```
|
|
GET /storage/zfs/pools/:id/datasets
|
|
POST /storage/zfs/pools/:id/datasets
|
|
DELETE /storage/zfs/pools/:id/datasets/:dataset
|
|
```
|
|
|
|
### 3.3 Request/Response Examples
|
|
|
|
#### Create ZFS Pool
|
|
```http
|
|
POST /api/v1/storage/zfs/pools
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"name": "tank",
|
|
"raid_level": "mirror",
|
|
"disks": ["/dev/sdb", "/dev/sdc"],
|
|
"compression": "lz4",
|
|
"deduplication": false
|
|
}
|
|
|
|
Response: 201 Created
|
|
{
|
|
"id": "uuid",
|
|
"name": "tank",
|
|
"status": "online",
|
|
"total_capacity_bytes": 1000000000000,
|
|
"created_at": "2025-01-01T00:00:00Z"
|
|
}
|
|
```
|
|
|
|
## 4. Shares API
|
|
|
|
### 4.1 Endpoints
|
|
```
|
|
GET /shares
|
|
GET /shares/:id
|
|
POST /shares
|
|
PUT /shares/:id
|
|
DELETE /shares/:id
|
|
```
|
|
|
|
### 4.2 Request/Response Examples
|
|
|
|
#### Create Share
|
|
```http
|
|
POST /api/v1/shares
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"dataset_id": "uuid",
|
|
"share_type": "both",
|
|
"nfs_enabled": true,
|
|
"nfs_clients": ["192.168.1.0/24"],
|
|
"smb_enabled": true,
|
|
"smb_share_name": "shared",
|
|
"smb_path": "/mnt/tank/shared",
|
|
"smb_guest_ok": false,
|
|
"smb_read_only": false
|
|
}
|
|
|
|
Response: 201 Created
|
|
{
|
|
"id": "uuid",
|
|
"dataset_id": "uuid",
|
|
"share_type": "both",
|
|
"nfs_enabled": true,
|
|
"smb_enabled": true,
|
|
"created_at": "2025-01-01T00:00:00Z"
|
|
}
|
|
```
|
|
|
|
## 5. iSCSI API
|
|
|
|
### 5.1 Endpoints
|
|
```
|
|
GET /scst/targets
|
|
GET /scst/targets/:id
|
|
POST /scst/targets
|
|
DELETE /scst/targets/:id
|
|
POST /scst/targets/:id/luns
|
|
DELETE /scst/targets/:id/luns/:lunId
|
|
POST /scst/targets/:id/initiators
|
|
GET /scst/initiators
|
|
POST /scst/config/apply
|
|
```
|
|
|
|
## 6. System API
|
|
|
|
### 6.1 Endpoints
|
|
```
|
|
GET /system/services
|
|
GET /system/services/:name
|
|
POST /system/services/:name/restart
|
|
GET /system/services/:name/logs
|
|
GET /system/interfaces
|
|
PUT /system/interfaces/:name
|
|
GET /system/ntp
|
|
POST /system/ntp
|
|
GET /system/logs
|
|
GET /system/network/throughput
|
|
POST /system/execute
|
|
POST /system/support-bundle
|
|
```
|
|
|
|
## 7. Monitoring API
|
|
|
|
### 7.1 Endpoints
|
|
```
|
|
GET /monitoring/metrics
|
|
GET /monitoring/health
|
|
GET /monitoring/alerts
|
|
GET /monitoring/alerts/:id
|
|
POST /monitoring/alerts/:id/acknowledge
|
|
POST /monitoring/alerts/:id/resolve
|
|
GET /monitoring/rules
|
|
POST /monitoring/rules
|
|
```
|
|
|
|
## 8. IAM API
|
|
|
|
### 8.1 Endpoints
|
|
```
|
|
GET /iam/users
|
|
GET /iam/users/:id
|
|
POST /iam/users
|
|
PUT /iam/users/:id
|
|
DELETE /iam/users/:id
|
|
|
|
GET /iam/roles
|
|
GET /iam/roles/:id
|
|
POST /iam/roles
|
|
PUT /iam/roles/:id
|
|
DELETE /iam/roles/:id
|
|
|
|
GET /iam/permissions
|
|
GET /iam/groups
|
|
```
|
|
|
|
## 9. Error Responses
|
|
|
|
### 9.1 Error Format
|
|
```json
|
|
{
|
|
"error": "Error message",
|
|
"code": "ERROR_CODE",
|
|
"details": {
|
|
"field": "validation error"
|
|
}
|
|
}
|
|
```
|
|
|
|
### 9.2 HTTP Status Codes
|
|
- **200 OK**: Success
|
|
- **201 Created**: Resource created
|
|
- **400 Bad Request**: Validation error
|
|
- **401 Unauthorized**: Authentication required
|
|
- **403 Forbidden**: Permission denied
|
|
- **404 Not Found**: Resource not found
|
|
- **500 Internal Server Error**: Server error
|
|
|
|
## 10. Pagination
|
|
|
|
### 10.1 Pagination Parameters
|
|
```
|
|
GET /api/v1/resource?page=1&limit=20
|
|
```
|
|
|
|
### 10.2 Pagination Response
|
|
```json
|
|
{
|
|
"data": [...],
|
|
"pagination": {
|
|
"page": 1,
|
|
"limit": 20,
|
|
"total": 100,
|
|
"total_pages": 5
|
|
}
|
|
}
|
|
```
|
|
|
|
## 11. Filtering & Sorting
|
|
|
|
### 11.1 Filtering
|
|
```
|
|
GET /api/v1/resource?status=active&type=filesystem
|
|
```
|
|
|
|
### 11.2 Sorting
|
|
```
|
|
GET /api/v1/resource?sort=name&order=asc
|
|
```
|
|
|
|
## 12. Rate Limiting
|
|
|
|
### 12.1 Rate Limits
|
|
- **Default**: 100 requests per minute per IP
|
|
- **Authenticated**: 200 requests per minute per user
|
|
- **Headers**: `X-RateLimit-Limit`, `X-RateLimit-Remaining`
|
|
|
|
## 13. Caching
|
|
|
|
### 13.1 Cache Headers
|
|
- **Cache-Control**: `max-age=300` for GET requests
|
|
- **ETag**: Entity tags for cache validation
|
|
- **Last-Modified**: Last modification time
|
|
|
|
### 13.2 Cache Invalidation
|
|
- **On Write**: Invalidate related cache entries
|
|
- **Manual**: Clear cache via admin endpoint
|
|
|