Build self-documenting APIs with Flask-RESTX Swagger UI, response marshalling, and namespaces.
Flask-RESTX (Swagger Auto-docs)
pip install flask-restx
from flask_restx import Api, Resource, fields
api = Api(app, doc="/docs") # Swagger UI at /docs
user_model = api.model("User", {
"id": fields.Integer(readonly=True),
"name": fields.String(required=True),
"email": fields.String(required=True),
})
@api.route("/users")
class UserList(Resource):
@api.marshal_list_with(user_model)
def get(self):
return User.query.all()
@api.expect(user_model)
@api.marshal_with(user_model, code=201)
def post(self):
data = api.payload
user = User(**data)
db.session.add(user)
db.session.commit()
return user, 201
@api.route("/users/<int:id>")
class UserResource(Resource):
@api.marshal_with(user_model)
def get(self, id):
return db.get_or_404(User, id)
def delete(self, id):
user = db.get_or_404(User, id)
db.session.delete(user)
db.session.commit()
return "", 204