Dalam pembangunan aplikasi web Python, membina RESTful API ialah topik yang tidak dapat dielakkan. API RESTful telah menjadi standard untuk pembangunan aplikasi web moden kerana ia membolehkan antara muka API yang ringan, berskala dan mudah diselenggara melalui protokol HTTP. Terdapat dua perpustakaan Python yang patut disebut: Flask-Restless dan Flask-SQLAlchemy. Mari terokai amalan terbaik tentang cara menggunakannya untuk membina API RESTful.
Flask-Restless ialah perpustakaan Python berkuasa yang direka untuk memudahkan pembangunan API RESTful. Ia menggunakan fungsi penghalaan dan pemprosesan permintaan yang disediakan oleh rangka kerja Flask, dan juga menyepadukan SQLAlchemy untuk mengendalikan operasi pangkalan data. Flask-SQLAlchemy ialah lanjutan untuk operasi pangkalan data dalam aplikasi Flask. Ia juga menyediakan fungsi ORM yang berkuasa untuk memudahkan penulisan kod.
Pertama, kita perlu menentukan model data yang akan dipaparkan. Sebagai contoh, pertimbangkan aplikasi blog mudah yang perlu melaksanakan API untuk siaran, ulasan dan pengguna. Kita boleh mentakrifkan model data berikut:
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100)) body = db.Column(db.Text) user_id = db.Column(db.Integer, db.ForeignKey('users.id')) comments = db.relationship('Comment', backref='post', lazy='dynamic') class Comment(db.Model): __tablename__ = 'comments' id = db.Column(db.Integer, primary_key=True) body = db.Column(db.String(140)) post_id = db.Column(db.Integer, db.ForeignKey('posts.id')) user_id = db.Column(db.Integer, db.ForeignKey('users.id')) class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(50), unique=True) email = db.Column(db.String(120), unique=True) posts = db.relationship('Post', backref='user', lazy='dynamic') comments = db.relationship('Comment', backref='user', lazy='dynamic')
Kemudian, kita boleh menggunakan Flask-Restless untuk mencipta API RESTful. Flask-Restless menyediakan cara yang cepat dan mudah untuk mencipta API. Untuk mencipta API, kita perlu melakukan langkah berikut:
1 Cipta aplikasi kelalang dan konfigurasikan pangkalan data.
from flask import Flask from flask_restless import APIManager from app.models import db, Post, Comment, User app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['JSON_SORT_KEYS'] = False db.init_app(app)
2. Buat pengurus API dan titik akhir API.
api_manager = APIManager(app, flask_sqlalchemy_db=db) api_manager.create_api(Post, methods=['GET', 'POST', 'PUT', 'DELETE']) api_manager.create_api(Comment, methods=['GET', 'POST', 'PUT', 'DELETE']) api_manager.create_api(User, methods=['GET', 'POST', 'PUT', 'DELETE'])
3. Mulakan aplikasi Flask.
if __name__ == '__main__': app.run(debug=True)
Kini, kami telah mencipta API RESTful asas yang membolehkan kami melaksanakan operasi CRUD pada siaran, ulasan dan pengguna melalui kaedah HTTP GET, POST, PUT dan DELETE. Tetapi ini hanyalah contoh asas. Kami juga perlu melaksanakan beberapa fungsi tambahan seperti penapisan, pengisihan dan halaman.
Flask-Restless menyediakan satu set parameter untuk menapis data. Sebagai contoh, kita boleh menggunakan parameter "q" untuk menentukan keadaan carian, parameter "halaman" untuk halaman, parameter "isih" untuk mengisih, dsb.
GET /api/posts?q={"filters":[{"name":"title","op":"like","val":"Flask"}]}&sort=-id&page=1
Permintaan GET di atas akan mengisih catatan blog dalam susunan terbalik mengikut id selepas dikembalikan, dan hanya mengembalikan halaman pertama dalam senarai catatan blog yang mengandungi "Flask" dalam tajuk (tidak sensitif huruf besar-besaran).
Selain itu, Flask-Restless juga menyokong parameter "include_columns" untuk memilih lajur untuk dikembalikan berdasarkan keperluan dan parameter "exclude_columns" untuk mengecualikan lajur yang tidak diperlukan. Sebagai contoh, permintaan GET berikut akan mengembalikan senarai yang mengandungi id artikel, tajuk dan maklumat pengarang, tetapi tiada maklumat badan.
GET /api/posts?include_columns=id,title,user&exclude_columns=body
Flask-SQLAlchemy juga menyediakan beberapa alat penapis pertanyaan yang berguna, seperti equal_to, like, ilike, dsb. Alat ini boleh digunakan untuk membuat pertanyaan yang lebih kompleks.
users = User.query.filter(User.username.ilike('%john%'))
Dalam contoh ini, pertanyaan akan sepadan dengan semua pengguna yang nama penggunanya mengandungi "john".
Untuk meringkaskan, Flask-Restless dan Flask-SQLAlchemy ialah dua perpustakaan Python yang berkuasa untuk mencipta API RESTful. Dengan menggunakannya secara gabungan, kami boleh dengan cepat dan ringkas membangunkan aplikasi API yang mudah diselenggara dan dilanjutkan. Dalam amalan, kita perlu memilih ciri yang terbaik untuk aplikasi kita berdasarkan keperluan sebenar. Tetapi ciri yang dinyatakan di sini ialah amalan terbaik untuk membina API RESTful.
Atas ialah kandungan terperinci Flask-Restless dan Flask-SQLAlchemy: Amalan terbaik untuk membina API RESTful dalam aplikasi web Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!