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)

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 :

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.