Expliquer un concept ou retrouver une façon de faire dans la documentation.

La documentation est assez fourni mais il peut être compliqué de trouver ce que l’on veut, l’agent fais plusieurs recherches dans celle ci afin de trouver la meilleur information.

Scénario: “Expliquer un concept de EFR

Question / Réponse

Q: Quelle est la différence entre un flux et une médiation ?

R:

Bonjour,

Un flux est un concept abstrait qui représente un transfert de données entre plusieurs applications. Il est mis en œuvre par une ou plusieurs médiations.

Une médiation est un programme en cours d'exécution. Elle peut représenter la totalité ou une partie d'un flux. Une médiation peut également être générique et participer à plusieurs flux.

En résumé :

  • Flux : Transfert de données (logique).

  • Médiation : Programme exécutant tout ou partie du transfert (implémentation).


Sources:

Scénario: “Implémenter du code dans EFR

Question / Réponse

Q: J'ai une application python avec un frontend fastAPI, comment puis je relier mon application aux API EFR ? (en te reponsant sur la documentation)

R:

Bonjour,

Pour connecter votre application Python / FastAPI aux API EFR, voici les étapes à suivre, basées sur la documentation officielle.

Étape 1 : Authentification

La première étape est de récupérer un jeton d'accès (token) via une requête POST sur le point de terminaison d'authentification.

POST /auth/realms/efr/protocol/openid-connect/token HTTP/1.1
Host: [domaine]
Content-Type: application/x-www-form-urlencoded
username=[...]&password=[...]&grant_type=password&client_id=[...]&client_secret=[...]

En retour, vous obtiendrez un access_token à utiliser pour les appels suivants.

Étape 2 : Appels aux API

Utilisez le jeton pour authentifier vos appels aux API EFR en l'ajoutant dans l'en-tête Authorization.

  • En-tête requis :

    Authorization: Bearer <access_token>
  • Exemple d'appel (Publier des traces) :

    POST /[environnement]/api/traces/1 HTTP/1.1
    Host: [domaine]
    Authorization: Bearer <access_token>
    Content-Type: application/json
    {
      "key": "value"
    }

Documentation Complète

La liste exhaustive des API et leurs spécifications est disponible dans la documentation OpenAPI accessible directement depuis l'IHM d'EFR.


Sources:

Peux tu me faire un bout de code qui rajoute ça à un appel type ?

Bien sûr, voici un exemple de code en Python utilisant la bibliothèque requests pour illustrer comment s'authentifier et ensuite effectuer un appel à une API EFR.

Prérequis

Assurez-vous d'avoir la bibliothèque requests installée :

pip install requests

Exemple de code

Cet exemple montre comment obtenir un jeton d'accès, puis l'utiliser pour publier une trace.

import requests
import json
# --- Configuration ---
# Remplacez ces valeurs par vos informations réelles
EFR_DOMAIN = "votre-domaine-efr.com"
EFR_ENVIRONMENT = "dev"
CLIENT_ID = "votre-client-id"
CLIENT_SECRET = "votre-client-secret"
USERNAME = "votre-username"
PASSWORD = "votre-password"
# --- 1. Authentification ---
auth_url = f"https://{EFR_DOMAIN}/auth/realms/efr/protocol/openid-connect/token"
auth_payload = {
    "grant_type": "password",
    "client_id": CLIENT_ID,
    "client_secret": CLIENT_SECRET,
    "username": USERNAME,
    "password": PASSWORD,
}
try:
    print("1. Demande du jeton d'accès...")
    auth_response = requests.post(auth_url, data=auth_payload)
    auth_response.raise_for_status()  # Lève une exception si la requête échoue (status >= 400)
    
    access_token = auth_response.json().get("access_token")
    print("   -> Jeton obtenu avec succès.")
    if not access_token:
        raise Valueerror("Le jeton d'accès n'a pas été trouvé dans la réponse.")
    # --- 2. Appel à l'API EFR (Exemple : Publier une trace) ---
    api_url = f"https://{EFR_DOMAIN}/{EFR_ENVIRONMENT}/api/traces/1"
    
    headers = {
        "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json",
    }
    # Données de la trace à envoyer
    trace_data = {
        "origin": "APP-001",
        "target": "APP-002",
        "status": "success",
        "informations": [
            {
                "name": "id_facture",
                "value": "FACT-12345"
            }
        ]
    }
    print("\n2. Envoi de la trace à l'API EFR...")
    api_response = requests.post(api_url, headers=headers, data=json.dumps(trace_data))
    api_response.raise_for_status()
    print(f"   -> Réponse de l'API : {api_response.status_code}")
    print(f"   -> Contenu : {api_response.json()}")
except requests.exceptions.HTTPerror as http_err:
    print(f"Erreur HTTP : {http_err}")
    print(f"Détails de la réponse : {http_err.response.text}")
except Exception as err:
    print(f"Une autre erreur est survenue : {err}")

Ce script est une base que vous pouvez intégrer et adapter à la logique de votre application FastAPI.


Sources:

On obient une réponse cohérente bien que imparfaite. Cependant cela peut aider à commencer l’intégration et/ou expliquer un concept facilement.