Trả JSON Response

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 9 tháng 6, 2025

Trong bài học này, bạn sẽ học cách trả về phản hồi dưới dạng JSON, đây là định dạng phổ biến trong các ứng dụng API hiện đại. Slim Framework hỗ trợ rất tốt cho việc trả JSON thông qua phương thức withJson(). Bài học cũng đề cập đến cách đặt HTTP status codeheader phù hợp.

Mục tiêu

  • Biết cách trả về dữ liệu JSON từ route hoặc controller.
  • Sử dụng đúng định dạng phản hồi và mã trạng thái HTTP.
  • Làm quen với cấu trúc phản hồi chuẩn RESTful.

1 Trả JSON với withJson()

Slim hỗ trợ phương thức withJson() giúp bạn dễ dàng trả về phản hồi dạng JSON mà không cần cấu hình thêm:

return $response->withJson([
    'success' => true,
    'message' => 'OK',
    'data' => [...]
]);

Phương thức này sẽ:

  • Thiết lập header Content-Type: application/json
  • Tự động json_encode dữ liệu

2 Thiết lập HTTP Status Code

Bạn có thể chỉ định mã trạng thái HTTP bằng tham số thứ hai trong withJson():

return $response->withJson(['error' => 'Not Found'], 404);

Một số mã trạng thái thường dùng:

Ý nghĩa
200 Thành công (OK)
201 Tạo mới thành công
400 Lỗi phía client
404 Không tìm thấy
500 Lỗi server nội bộ

3 Cấu trúc chuẩn REST API

Phản hồi chuẩn REST thường bao gồm:

{
  "success": true,
  "message": "Danh sách bài viết",
  "data": [
    {
      "id": 1,
      "title": "Hello Slim",
      "content": "Slim rất nhẹ"
    }
  ]
}

Ví dụ cụ thể

Route trả về thông tin bài viết

$app->get('/api/posts/{id}', function ($request, $response, $args) {
    $post = \App\Models\Post::find($args['id']);
    
    if (!$post) {
        return $response->withJson([
            'success' => false,
            'message' => 'Post not found'
        ], 404);
    }

    return $response->withJson([
        'success' => true,
        'message' => 'Post found',
        'data' => $post
    ]);
});

Route trả về danh sách bài viết

$app->get('/api/posts', function ($request, $response) {
    $posts = \App\Models\Post::all();
    
    return $response->withJson([
        'success' => true,
        'message' => 'List of posts',
        'data' => $posts
    ]);
});

Kết quả mong đợi

  • Route trả về JSON đúng định dạng.
  • Dữ liệu JSON bao gồm các thông tin như success, message, và data.
  • Mã trạng thái HTTP phản ánh chính xác kết quả xử lý.

Bài tập thực hành

  1. Tạo một route /api/posts/{id} trả thông tin bài viết ở định dạng JSON.
  2. Nếu không tìm thấy bài viết, trả về JSON lỗi với mã trạng thái 404.
  3. Thiết kế phản hồi theo cấu trúc:
{
  "success": true,
  "message": "Chi tiết bài viết",
  "data": { "id": 1, "title": "...", "content": "..." }
}
Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ