Xây Dựng RESTful API Đơn Giản Với Flask

Trong quá trình phát triển ứng dụng web hoặc ứng dụng di động, việc xây dựng các Web API (Application Programming Interface) để giao tiếp giữa client và server là kĩ năng cốt lõi. Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách thiết lập một RESTful API đơn giản hỗ trợ các phương thức GET và POST bằng khung làm việc Flask trong Python.

Xây dựng RESTful API đơn giản sử dụng khung làm việc Flask trong Python
Ảnh minh họa: Designing a RESTful API with Python and Flask - miguelgrinberg.com

1. Chuẩn Bị Môi Trường Và Cài Đặt Flask

Để bắt đầu, bạn cần cài đặt thư viện Flask. Hãy mở terminal/command prompt và thực hiện cài đặt thông qua pip:

pip install flask

Sau khi cài đặt thành công, ta tạo một file Python mới có tên là app.py làm điểm khởi chạy cho dịch vụ API.

2. Khởi Tạo Khung Ứng Dụng Flask

Đầu tiên, chúng ta khai báo và khởi tạo ứng dụng Flask cơ bản cùng hàm jsonify giúp chuyển đổi dữ liệu Python (như dictionary, list) thành định dạng JSON chuẩn cho API:

from flask import Flask, jsonify, request

app = Flask(__name__)

# Dữ liệu mẫu lưu trữ trong bộ nhớ (In-memory data)
tasks = [
    {
        'id': 1,
        'title': 'Học Python cơ bản',
        'done': True
    },
    {
        'id': 2,
        'title': 'Xây dựng RESTful API với Flask',
        'done': False
    }
]

3. Định Nghĩa Phương Thức GET Để Truy Xuất Dữ Liệu

Phương thức GET dùng để truy vấn và lấy dữ liệu từ hệ thống mà không làm thay đổi trạng thái của tài nguyên.

Lấy toàn bộ danh sách công việc

Đoạn mã sau tạo endpoint /api/v1.0/tasks lắng nghe các request GET để trả về toàn bộ danh sách công việc:

@app.route('/api/v1.0/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks}), 200

Lấy chi tiết một công việc theo ID

Để lấy thông tin của từng công việc cụ thể, chúng ta có thể truyền tham số động trên URL dạng <int:task_id>:

@app.route('/api/v1.0/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = next((item for item in tasks if item['id'] == task_id), None)
    if task is None:
        return jsonify({'error': 'Resource not found'}), 404
    return jsonify({'task': task}), 200

4. Định Nghĩa Phương Thức POST Để Tạo Dữ Liệu Mới

Phương thức POST cho phép client gửi dữ liệu (thường dưới dạng chuỗi JSON trong Request Body) lên server để khởi tạo một tài nguyên mới.

Trong hàm xử lý, chúng ta dùng request.json hoặc request.get_json() để đọc dữ liệu gửi lên. Nếu yêu cầu thiếu thông tin bắt buộc (như tiêu đề title), server sẽ phản hồi mã lỗi 400 Bad Request.

@app.route('/api/v1.0/tasks', methods=['POST'])
def create_task():
    # Kiểm tra xem dữ liệu gửi lên có phải dạng JSON và chứa trường 'title' hay không
    if not request.json or 'title' not in request.json:
        return jsonify({'error': 'Bad request, title is required'}), 400

    # Tạo bản ghi mới
    new_task = {
        'id': tasks[-1]['id'] + 1 if tasks else 1,
        'title': request.json['title'],
        'done': False
    }
    
    tasks.append(new_task)
    # Trả về đối tượng vừa tạo kèm theo HTTP Status Code 201 (Created)
    return jsonify({'task': new_task}), 201

5. Chạy Ứng Dụng Và Kiểm Thử API

Để chạy ứng dụng Flask, thêm đoạn mã sau vào cuối file app.py:

if __name__ == '__main__':
    app.run(debug=True, port=5000)

Thực thi file bằng lệnh python app.py. Ứng dụng sẽ chạy tại địa chỉ http://127.0.0.1:5000/.

Cách kiểm thử API:

Nhận xét