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
# 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:
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
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
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
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 ProductList
và ProductDetail
để 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
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
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