Python in Plain English

New Python content every day. Follow to join our 3.5M+ monthly readers.

Follow publication

Flask RESTful API Best Practices

Felipe Silveira
Python in Plain English
5 min readApr 16, 2021

--

APIs

REST

HTTP Requests

Endpoints Conventions

The project structure

project/
|
├── app/
| └── __init__.py
|
├── migrations/
| └── ...
|
└── models.py
export FLASK_APP='app'
export FLASK_ENV='development'
or$env:FLASK_APP='app'
$env:FLASK_ENV='development'

Hands-on

@app.route('/users')
def index():
users = User.query.order_by(User.id).all()
if len(users) == 0:
abort(404)
return jsonify({
'success': True,
'users': users
})
@app.route('/users', methods=['POST'])
def store():
body = request.get_json()
name = body.get('name', None)
age = body.get('age', None)
try:
user = User(name=name, age=age)
user.create()
return jsonify({
'success': True,
'created': user.format()
})
except:
abort(422)
@app.route('/users/<int:user_id>')
def show(user_id):
user = User.query.filter(User.id == user_id).one_or_none()
if user is None:
abort(404)
else:
return jsonify({
'success': True,
'user': user.format()
})
@app.route('/users/<int:user_id>', methods=['PATCH'])
def update(user_id):
body = request.get_json()
try:
user = User.query.filter(User.id == user_id).one_or_none()
if user is None:
abort(404)
if 'name' in body:
user.name = body.get('name')
user.update() return jsonify({
'success': True,
'updated': user.format()
})
except:
abort(422)
@app.route('/users/<int:user_id>', methods=['DELETE'])
def destroy(user_id):
try:
user = User.query.filter(User.id == user_id).one_or_none()
if user is None:
abort(404)
user.delete() return jsonify({
'success': True,
'deleted': user.format()
})
except:
abort(422)

Conclusion

--

--

No responses yet

Write a response