Nous voilà donc dans la dernière ligne droite pour configurer notre API REST.
Je vous ai rassemblé les références qui m’ont servi à aboutir ce projet à la fin de cette article, des heures de recherche et de tests (souvent infructueux) pour parvenir à ce l’API REST se comporte comme souhaité, vous allez ainsi gagner un temps précieux.
Le résumé en vidéo
Le fichier app.py final
import os
import sys
import subprocess
from flask import Flask, request, make_response, jsonify
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(1)
app = Flask(__name__)
# this is the entry point
application = app
from flask_httpauth import HTTPBasicAuth
auth = HTTPBasicAuth()
@auth.get_password
def get_password(username):
if username == 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx':
return 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
return None
@auth.error_handler
def unauthorized():
return make_response(jsonify({'error': 'Unauthorized access'}), 403)
# let's check order status
@app.route('/status', methods = ['POST'])
@auth.login_required
def order_status():
request_data = request.get_json()
ORDER_ID = request_data['ORDER_ID']
result = subprocess.run(['/le/chemin/absolu/vers/mon_bash_script_1.sh', str(ORDER_ID)], stdout=subprocess.PIPE)
result_string = result.stdout.decode('utf-8')
return make_response(jsonify({'status': result_string.rstrip()}), 200)
# let's do the housework
@app.route('/clean', methods = ['POST'])
@auth.login_required
def notify_order_clean():
request_data = request.get_json()
ORDER_ID = request_data['ORDER_ID']
CUSTOMER_EMAIL = request_data['CUSTOMER_EMAIL']
executor.submit(order_clean, ORDER_ID, CUSTOMER_EMAIL)
return make_response(jsonify({'Reply': 'Housework was launched in background!'}), 200)
def order_clean(arg1, arg2):
subprocess.run(['/le/chemin/absolu/vers/mon_bash_script_2.sh', str(arg1), str(arg2)])
print('Housework is done!')
if __name__ == "__main__":
app.run()
Les références utilisées (pour comprendre et personnaliser ce projet)
Flask
- Documentation officielle https://flask.palletsprojects.com/en/2.0.x/
- Extension flask_httpauth https://flask-httpauth.readthedocs.io/en/latest/
Python
- subprocess https://docs.python.org/fr/3/library/subprocess.html
- concurrent.futures https://docs.python.org/fr/3/library/concurrent.futures.html
- Formatage des données https://docs.python.org/fr/3/tutorial/inputoutput.html
Ressources diverses
- How to Host Flask Application on CPanel? par Rafi Afridi
- Designing a RESTful API with Python and Flask par Miguel Grinberg
- Flask application run threads in the background par Tony Tan
- How to Create and Use Bash Scripts par Tania Rascia
Cet article vous a été utile ?
Oui 👍
Non 👎


