Performance: API versioning with blueprints
This affects the initial server response time and routing efficiency, impacting how quickly the API can handle requests for different versions.
from flask import Flask, Blueprint v1 = Blueprint('v1', __name__, url_prefix='/api/v1') @v1.route('/resource') def resource_v1(): return 'v1 data' v2 = Blueprint('v2', __name__, url_prefix='/api/v2') @v2.route('/resource') def resource_v2(): return 'v2 data' app = Flask(__name__) app.register_blueprint(v1) app.register_blueprint(v2) if __name__ == "__main__": app.run()
from flask import Flask app = Flask(__name__) @app.route('/api/v1/resource') def resource_v1(): return 'v1 data' @app.route('/api/v2/resource') def resource_v2(): return 'v2 data' if __name__ == "__main__": app.run()
| Pattern | Routing Table Size | Request Matching Speed | Server CPU Load | Verdict |
|---|---|---|---|---|
| Single app with all routes | Large (all versions combined) | Slower (linear search) | Higher (more CPU for matching) | [X] Bad |
| Blueprints per API version | Smaller per blueprint | Faster (modular lookup) | Lower (efficient matching) | [OK] Good |
url_prefix in Blueprints lets you separate API versions by URL path.url_prefix keyword.from flask import Flask, Blueprint
app = Flask(__name__)
bp_v1 = Blueprint('v1', __name__, url_prefix='/api/v1')
@bp_v1.route('/hello')
def hello_v1():
return 'Hello from v1!'
bp_v2 = Blueprint('v2', __name__, url_prefix='/api/v2')
@bp_v2.route('/hello')
def hello_v2():
return 'Hello from v2!'
app.register_blueprint(bp_v1)
app.register_blueprint(bp_v2)bp_v1 = Blueprint('v1', __name__, url_prefix='/api/v1')
@bp_v1.route('/data')
def data_v1():
return 'Data v1'
app.register_blueprint(bp_v1)
bp_v2 = Blueprint('v2', __name__, url_prefix='/api/v2')
@bp_v1.route('/data')
def data_v2():
return 'Data v2'
app.register_blueprint(bp_v2)@bp_v1.route but should use @bp_v2.route.Pass the test and this pattern moves unknown