FRAMEWORK » FLASK » EXTENSIONS
RESTX
Decorators
Route definition
Endpoint with no arguments:
python
@api.route('/tasks')
Endpoint that requires an argument (available converters):
python
@api.route('/tasks/<string:name>')
Input args
python
@api.doc(
description='Documentation of this API',
params={ # For query parameters
'id': {
'description': 'An ID',
'in': 'query',
'type': 'int',
},
'format': {
'description': 'A file format',
'in': 'query',
'type': 'string',
'enum': ['json', 'csv'],
}
}
)
@api.expect(my_model) # Expected input parameters (body)
Output data
python
@api.marshal_with(my_model) # Expected return values, code, description
@api.response(200, 'Success') # May be used several times
@api.header() # Response header
If the same endpoint returns multiple data formats:
- Use
marshal()
when returning JSON data - Use
Response()
when returning anything else
python
from flask_restx import marshal
def get(self):
output_format = request.args.get('format', 'json')
output_type = request.args.get('type', 'summary')
if output_format == 'csv': # CSV data
return Response(csv_content, mimetype='text/csv')
if output_type == 'detailed': # Dict using detailed_model
return marshal(detailed_json_content, detailed_model), 200
# Dict using summary_model
return marshal(summary_json_content, summary_model), 200
Models
python
my_model = api.model('ResourceName', {
'id': fields.Integer,
'name': fields.String,
})