Content is user-generated and unverified.

ตัวอย่าง API Response

1. Login API

POST /api/auth/login

กรณีสำเร็จ (200)

json
{
  "success": true,
  "data": {
    "user": {
      "id": 1,
      "username": "john_doe",
      "email": "john@example.com",
      "full_name": "John Doe",
      "role": "user",
      "avatar": "https://example.com/avatars/john.jpg",
      "last_login": "2025-06-30 11:30:00"
    },
    "tokens": {
      "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
      "refresh_token": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4...",
      "expires_in": 3600,
      "token_type": "Bearer"
    }
  },
  "message": "เข้าสู่ระบบสำเร็จ",
  "timestamp": "2025-06-30 11:30:00"
}

กรณีข้อมูลผิด (401)

json
{
  "success": false,
  "error": {
    "code": "INVALID_CREDENTIALS",
    "message": "อีเมลหรือรหัสผ่านไม่ถูกต้อง",
    "details": "ไม่พบผู้ใช้หรือรหัสผ่านผิด"
  },
  "timestamp": "2025-06-30 11:30:00"
}

กรณี Validation Error (422)

json
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "ข้อมูลไม่ถูกต้อง",
    "errors": {
      "email": ["รูปแบบอีเมลไม่ถูกต้อง"],
      "password": ["รหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร"]
    }
  },
  "timestamp": "2025-06-30 11:30:00"
}

กรณีบัญชีถูกระงับ (403)

json
{
  "success": false,
  "error": {
    "code": "ACCOUNT_SUSPENDED",
    "message": "บัญชีถูกระงับการใช้งาน",
    "details": "กรุณาติดต่อผู้ดูแลระบบ"
  },
  "timestamp": "2025-06-30 11:30:00"
}

2. Users API (with Pagination)

GET /api/users?page=1&limit=10&search=john&role=user

กรณีสำเร็จ (200)

json
{
  "success": true,
  "data": {
    "users": [
      {
        "id": 1,
        "username": "john_doe",
        "email": "john@example.com",
        "full_name": "John Doe",
        "role": "user",
        "avatar": "https://example.com/avatars/john.jpg",
        "status": "active",
        "created_at": "2025-01-15 10:00:00",
        "last_login": "2025-06-30 09:00:00"
      },
      {
        "id": 5,
        "username": "johnny_smith",
        "email": "johnny@example.com",
        "full_name": "Johnny Smith",
        "role": "user",
        "avatar": null,
        "status": "active",
        "created_at": "2025-02-20 14:30:00",
        "last_login": "2025-06-29 16:45:00"
      }
    ],
    "pagination": {
      "current_page": 1,
      "per_page": 10,
      "total": 25,
      "total_pages": 3,
      "has_next": true,
      "has_prev": false,
      "next_page": 2,
      "prev_page": null
    },
    "filters": {
      "search": "john",
      "role": "user",
      "status": "active"
    }
  },
  "message": "ดึงข้อมูลผู้ใช้สำเร็จ",
  "timestamp": "2025-06-30 11:30:00"
}

กรณีไม่มีข้อมูล (200)

json
{
  "success": true,
  "data": {
    "users": [],
    "pagination": {
      "current_page": 1,
      "per_page": 10,
      "total": 0,
      "total_pages": 0,
      "has_next": false,
      "has_prev": false,
      "next_page": null,
      "prev_page": null
    },
    "filters": {
      "search": "nonexistent",
      "role": "user",
      "status": "active"
    }
  },
  "message": "ไม่พบข้อมูลผู้ใช้",
  "timestamp": "2025-06-30 11:30:00"
}

กรณีไม่มีสิทธิ์เข้าถึง (403)

json
{
  "success": false,
  "error": {
    "code": "INSUFFICIENT_PERMISSION",
    "message": "ไม่มีสิทธิ์เข้าถึงข้อมูลผู้ใช้",
    "details": "จำเป็นต้องมีสิทธิ์ admin หรือ manager"
  },
  "timestamp": "2025-06-30 11:30:00"
}

กรณี Token หมดอายุ (401)

json
{
  "success": false,
  "error": {
    "code": "TOKEN_EXPIRED",
    "message": "Token หมดอายุ",
    "details": "กรุณาเข้าสู่ระบบใหม่"
  },
  "timestamp": "2025-06-30 11:30:00"
}

กรณี Parameter ผิด (400)

json
{
  "success": false,
  "error": {
    "code": "INVALID_PARAMETER",
    "message": "พารามิเตอร์ไม่ถูกต้อง",
    "errors": {
      "page": ["หน้าต้องเป็นตัวเลขมากกว่า 0"],
      "limit": ["จำนวนต่อหน้าต้องอยู่ระหว่าง 1-100"],
      "role": ["บทบาทที่ระบุไม่ถูกต้อง"]
    }
  },
  "timestamp": "2025-06-30 11:30:00"
}

3. การใช้งานใน JavaScript

Login

javascript
// Login function
async function login(email, password) {
  try {
    const response = await fetch('/api/auth/login', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'X-CSRF-Token': csrfToken
      },
      body: JSON.stringify({ email, password })
    });
    
    const result = await response.json();
    
    if (result.success) {
      // บันทึก token
      localStorage.setItem('access_token', result.data.tokens.access_token);
      localStorage.setItem('refresh_token', result.data.tokens.refresh_token);
      
      // redirect หรือ update UI
      window.location.href = '/dashboard';
    } else {
      // แสดง error message
      showError(result.error.message);
      
      // handle validation errors
      if (result.error.errors) {
        displayValidationErrors(result.error.errors);
      }
    }
  } catch (error) {
    showError('เกิดข้อผิดพลาดในการเชื่อมต่อ');
  }
}

Users List with Pagination

javascript
// Fetch users function
async function fetchUsers(page = 1, limit = 10, filters = {}) {
  const params = new URLSearchParams({
    page,
    limit,
    ...filters
  });
  
  try {
    const response = await fetch(`/api/users?${params}`, {
      headers: {
        'Authorization': `Bearer ${localStorage.getItem('access_token')}`,
        'Content-Type': 'application/json'
      }
    });
    
    const result = await response.json();
    
    if (result.success) {
      // แสดงข้อมูลผู้ใช้
      renderUsers(result.data.users);
      
      // แสดง pagination
      renderPagination(result.data.pagination);
      
      // แสดงข้อมูล filter ปัจจุบัน
      updateFilterDisplay(result.data.filters);
    } else {
      // handle errors
      if (result.error.code === 'TOKEN_EXPIRED') {
        // redirect to login
        window.location.href = '/login';
      } else {
        showError(result.error.message);
      }
    }
  } catch (error) {
    showError('เกิดข้อผิดพลาดในการดึงข้อมูล');
  }
}

4. การใช้งานใน PHP

Login Response

php
// สำเร็จ
return response()->json([
    'success' => true,
    'data' => [
        'user' => $user->makeHidden(['password']),
        'tokens' => [
            'access_token' => $accessToken,
            'refresh_token' => $refreshToken,
            'expires_in' => 3600,
            'token_type' => 'Bearer'
        ]
    ],
    'message' => 'เข้าสู่ระบบสำเร็จ',
    'timestamp' => now()
], 200);

// ล้มเหลว
return response()->json([
    'success' => false,
    'error' => [
        'code' => 'INVALID_CREDENTIALS',
        'message' => 'อีเมลหรือรหัสผ่านไม่ถูกต้อง',
        'details' => 'ไม่พบผู้ใช้หรือรหัสผ่านผิด'
    ],
    'timestamp' => now()
], 401);

Users List Response

php
$users = User::query()
    ->when($request->search, function($query) use ($request) {
        $query->where('full_name', 'like', '%' . $request->search . '%')
              ->orWhere('email', 'like', '%' . $request->search . '%');
    })
    ->when($request->role, function($query) use ($request) {
        $query->where('role', $request->role);
    })
    ->paginate($request->limit ?? 10);

return response()->json([
    'success' => true,
    'data' => [
        'users' => $users->items(),
        'pagination' => [
            'current_page' => $users->currentPage(),
            'per_page' => $users->perPage(),
            'total' => $users->total(),
            'total_pages' => $users->lastPage(),
            'has_next' => $users->hasMorePages(),
            'has_prev' => $users->currentPage() > 1,
            'next_page' => $users->hasMorePages() ? $users->currentPage() + 1 : null,
            'prev_page' => $users->currentPage() > 1 ? $users->currentPage() - 1 : null,
        ],
        'filters' => $request->only(['search', 'role', 'status'])
    ],
    'message' => 'ดึงข้อมูลผู้ใช้สำเร็จ',
    'timestamp' => now()
], 200);
Content is user-generated and unverified.
    ตัวอย่าง API Response - Login และ Users | Claude