0
0
Posts
TD
TVQ Devtvq_dev

Xây Dựng Một RESTful API Đơn Giản Với Python Và Flask

Đăng vào 8 tháng trước

• 5 phút đọc

Chủ đề:

Python

Trong bài viết này, chúng ta sẽ cùng nhau tạo ra một RESTful API đơn giản bằng Python với sự hỗ trợ của Flask Framework. Flask là một micro web framework viết bằng Python, nó nhỏ gọn, linh hoạt và dễ sử dụng, đặc biệt phù hợp cho việc xây dựng các ứng dụng web và API

Thiết Kế RESTful API

RESTful API (Representational State Transfer) là một kiểu kiến trúc phần mềm cho phép tạo ra các ứng dụng web có thể giao tiếp với nhau thông qua các giao thức HTTP như GET, POST, PUT, DELETE. Trong ví dụ này, chúng ta sẽ tạo ra một API đơn giản để quản lý danh sách sản phẩm với các chức năng cơ bản như tạo mới, đọc, cập nhật và xóa.

Cài Đặt Môi Trường

Trước tiên, chúng ta cần cài đặt Flask và các thư viện liên quan. Tôi khuyên bạn nên sử dụng một môi trường ảo (virtual environment) để quản lý các gói phụ thuộc một cách dễ dàng

bash Copy
# Tạo môi trường ảo
python -m venv venv

# Kích hoạt môi trường ảo
source venv/bin/activate  # Trên Windows, sử dụng `venv\Scripts\activate`

# Cài đặt Flask và Flask-SQLAlchemy
pip install flask flask-sqlalchemy

Cấu Trúc Dự Án

Sau khi cài đặt xong, chúng ta sẽ tạo cấu trúc thư mục cho dự án như sau:

Copy
flask_app/
    app/
        __init__.py
        models.py
        views.py
    run.py

Trong đó:

  • app/__init__.py: Khởi tạo ứng dụng Flask và cấu hình cơ sở dữ liệu.
  • app/models.py: Định nghĩa mô hình dữ liệu cho sản phẩm.
  • app/views.py: Định nghĩa các route và xử lý logic cho API.
  • run.py: File chạy ứng dụng Flask.

Cài Đặt Ứng Dụng Flask

Đầu tiên, chúng ta sẽ khởi tạo ứng dụng Flask và cấu hình cơ sở dữ liệu SQLite trong file app/__init__.py:

python Copy
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///products.db'
db = SQLAlchemy(app)

from app import views, models

Tiếp theo, chúng ta sẽ định nghĩa mô hình dữ liệu cho sản phẩm trong file app/models.py:

python Copy
from app import db

class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    price = db.Column(db.Float, nullable=False)

    def __repr__(self):
        return f'<Product {self.name}>'

Định Nghĩa API Routes

Bây giờ, chúng ta sẽ định nghĩa các route cho API trong file app/views.py. Chúng ta sẽ sử dụng Flask-RESTful, một extension của Flask, để xây dựng API một cách dễ dàng

python Copy
from flask import jsonify, request
from flask_restful import Resource, Api
from app import app, db
from app.models import Product

api = Api(app)

class ProductList(Resource):
    def get(self):
        products = Product.query.all()
        return jsonify([p.serialize() for p in products])

    def post(self):
        data = request.get_json()
        product = Product(name=data['name'], price=data['price'])
        db.session.add(product)
        db.session.commit()
        return jsonify(product.serialize())

class ProductDetail(Resource):
    def get(self, id):
        product = Product.query.get(id)
        if product:
            return jsonify(product.serialize())
        return jsonify({'message': 'Product not found'}), 404

    def put(self, id):
        product = Product.query.get(id)
        if product:
            data = request.get_json()
            product.name = data['name']
            product.price = data['price']
            db.session.commit()
            return jsonify(product.serialize())
        return jsonify({'message': 'Product not found'}), 404

    def delete(self, id):
        product = Product.query.get(id)
        if product:
            db.session.delete(product)
            db.session.commit()
            return jsonify({'message': 'Product deleted'})
        return jsonify({'message': 'Product not found'}), 404

# Thêm phương thức serialize() vào model Product
def serialize(self):
    return {
        'id': self.id,
        'name': self.name,
        'price': self.price
    }

Product.serialize = serialize

api.add_resource(ProductList, '/products')
api.add_resource(ProductDetail, '/products/<int:id>')

Trong đoạn mã trên, chúng ta đã định nghĩa hai lớp tài nguyên ProductListProductDetail để xử lý các yêu cầu HTTP tương ứng với danh sách sản phẩm và chi tiết sản phẩm

Chạy Ứng Dụng

Cuối cùng, chúng ta sẽ tạo file run.py để chạy ứng dụng Flask:

python Copy
from app import app, db

if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run(debug=True)

Để chạy ứng dụng, hãy mở terminal và gõ lệnh sau:

bash Copy
python run.py

Ứng dụng sẽ khởi chạy trên địa chỉ http://localhost:5000/. Bạn có thể sử dụng một công cụ như Postman để gửi các yêu cầu HTTP tới API và kiểm tra kết quả trả về

Kết Luận

Trong bài viết này, chúng ta đã cùng nhau xây dựng một RESTful API đơn giản với Python và Flask. Mặc dù đây là một ví dụ đơn giản, nhưng nó đã giới thiệu cho bạn cách thiết kế và triển khai một API RESTful cơ bản. Bạn có thể mở rộng ví dụ này bằng cách thêm các tính năng mới, xác thực người dùng, xử lý lỗi, và nhiều hơn nữa

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào