Archi Web
99 % des services sont utilisés à travers le Web.
Pour une application => Protocole applicatif
Avant on developpait un protocole custom, les serveurs et clients custom qui comprennent ce dernier.
HTML a été créé à la base pour servir des fichiers statiques. Aujourd’hui, on passe par le réseau pour tout.
main.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def index():
return "Hello World!"
@app.route("/<int:number>")
def mult(number):
return str(2 * number)
@app.route("/json/<int:number>")
def my_json(number):
my_dict = {'lol': 'MDR', 'result': str(number * 3)}
l = [12, 14, 42, 51]
my_dict['l'] = l
return jsonify(my_dict)
FLASK_APP=main:app flask run
test_main.py
import main
def test_index():
app = main.app.test_client()
response = app.get("/")
assert b"Hello World" in reponse.data
def test_mult():
app = main.app.test_client()
ret = app.get("/21")
assert b"42" in ret.data
def test_json():
app = main.app.test_client()
ret = app.get('/json/31').get_json()
assert ret['lol'] == 'MDR'
assert ret['result'] == '93'
HTTP est très aprecié par OPS pour que les services puissent se parler entre eux. Les OPS administrent ses derniers.
JSON est isomorphe à un dico et avec des listes.
REST full design
APP <-> App server <-> Reverse-Proxy <-> Client
HTTP | HTTPS
Flask UWSGI | Nginx
| SSL termination
Réplication des services. Le Reverse-Proxy peut servir de load balancer.
Header host pour connaître à qui donner la requête.
Déploiement :
- Serveur applicatif (UWSGI, Gunicorn, Tomcat (JAVA), …)
- Reverse proxy : Gère les certificats et la securité (SSL, HTTPS)
Condition indispensable : Stateless. Elle n’a pas de ddb propre, pour éviter des pertes en cas de down ou de réplication. On externalise le stateful.
Archi Web
99 % des services sont utilisés à travers le Web.
Pour une application => Protocole applicatif
Avant on developpait un protocole custom, les serveurs et clients custom qui comprennent ce dernier.
HTML a été créé à la base pour servir des fichiers statiques. Aujourd’hui, on passe par le réseau pour tout.
main.py
# Flask installé from flask import Flask, jsonify app = Flask(__name__) @app.route("/") def index(): return "Hello World!" @app.route("/<int:number>") def mult(number): return str(2 * number) @app.route("/json/<int:number>") def my_json(number): my_dict = {'lol': 'MDR', 'result': str(number * 3)} l = [12, 14, 42, 51] my_dict['l'] = l return jsonify(my_dict)
test_main.py
import main def test_index(): app = main.app.test_client() response = app.get("/") assert b"Hello World" in reponse.data def test_mult(): app = main.app.test_client() ret = app.get("/21") assert b"42" in ret.data def test_json(): app = main.app.test_client() ret = app.get('/json/31').get_json() assert ret['lol'] == 'MDR' assert ret['result'] == '93'
HTTP est très aprecié par OPS pour que les services puissent se parler entre eux. Les OPS administrent ses derniers.
JSON est isomorphe à un dico et avec des listes.
REST full design
APP <-> App server <-> Reverse-Proxy <-> Client
Réplication des services. Le Reverse-Proxy peut servir de load balancer.
Header host pour connaître à qui donner la requête.
Déploiement :
Condition indispensable : Stateless. Elle n’a pas de ddb propre, pour éviter des pertes en cas de down ou de réplication. On externalise le stateful.