Classe lrRequest¶
Role
Objet reçu par les méthodes REST associées aux routes.
Contient la requête HTTP reçue par LightREST : headers, URL, variables de route, body, fichiers, données custom, et structures d’authentification.
Membres et propriétés
| Nom | Type | Usage |
|---|---|---|
Authentication | Structure lrAuthentication | Infos d’authentification reçues dans la requête REST |
Body | Buffer | Body de la requête REST. Contenu au format texte, binaire, JSON, XML, ... |
ContentLength | entier sur 8 octets | Longueur du body en octets |
CustomData | Variant | Données custom précédemment attachées à la requête par un HOOK. Voir également lrRequest:ServerCustomData et lrRequest:RouteCustomData. |
Files | tableau associatif de Structures lrFile | Tableau des fichiers uploadés |
Header | tableau associatif (ccSansCasse+AvecDoublon) de chaîne | Headers HTTP |
Host | chaîne | Hôte |
ID | chaîne | Identifiant LightREST interne de la requête. Utile par exemple pour analyser les logs LightREST |
Method | chaîne | Méthode HTTP (GET/POST/UPDATE…). |
PostForm | tableau associatif (ccSansCasse) de chaîne | Champs de formulaire POST |
Proto | chaîne | Protocole (ex: HTTP/1.1). |
RemoteAddr | chaîne | Adresse distante (IP:port client) |
RequestURI | chaîne | URI brute. |
RouteCustomData | Variant | Données custom attachées lors de la création de la route lrRoute:CustomData. |
ServerCustomData | Variant | Données custom attachées au serveur lrServer.CustomData. |
URL | Structure lrUrl | Composition de l'URL |
Vars | tableau associatif (ccSansCasse) de chaîne | Variables extraites de la route ({id} → Vars[\"id\"]).Accessibles avec la méthode :GetRouteValue(). |
Types
lrURL — Décomposition de l’URL de la requête.
🏷️ Type
Structure
📘 Présentation
Décomposition de l’URL de la requête.
🔧 Structure
| Nom | Type | Usage |
|---|---|---|
Scheme | chaîne | Schéma de l’URL (http/https). |
User | chaîne | Utilisateur présent dans l’URL (si fourni). |
Host | chaîne | Hôte (domaine + port éventuel). |
Path | chaîne | Chemin (path) de l’URL. |
RawPath | chaîne | Chemin brut (RawPath) lorsqu’il est renseigné. |
QueryValues | tableau associatif (ccSansCasse) de chaînes | Paramètres de query-string. Accessible par la méthode :GetURLValue() |
lrFile — Décrit un fichier uploadé dans la requête.
🏷️ Type
Structure
📘 Présentation
Décrit un fichier uploadé dans la requête.
🔧 Structure
| Nom | Type | Usage |
|---|---|---|
Name | chaîne | Nom du fichier. |
Content | Buffer | Contenu binaire du fichier. |
lrAuthentication — Informations d’authentification fournies dans la requête.
🏷️ Type
Structure
📘 Présentation
Informations d’authentification fournies dans la requête.
🔧 Structure
| Nom | Type | Usage |
|---|---|---|
User | chaîne | Identifiant. |
Password | chaîne | Mot de passe. |
Méthodes¶
GetHeaderValue
📘 Présentation
Renvoie la valeur d’un header HTTP
🧩 Prototypage
GetHeaderValue(pHeader est chaîne) : chaîne
🔧 Paramètres
| Nom | Type | Usage |
|---|---|---|
pHeader | chaîne | Nom du header. |
↩️ Valeurs retournées
| Type | Usage |
|---|---|
| chaîne | Valeur du HEADER HTTP reçu (chaîne vide si absente) |
🧪 Exemple
- Lecture d'une clé d'API transmise dans le header X-API-KEY
- Refus en StatusUnauthorized si la clé est absente ou invalide
- Exemple typique : sécuriser une route de “ping” ou un endpoint d'administration
FONCTION PingSecure(poRequest est objet lrRequest, poResponse est objet lrResponse)
sApiKey est chaîne
sApiKey = poRequest:GetHeaderValue("X-API-KEY")
SI sApiKey="" OU sApiKey<>"MY_SECRET_KEY" ALORS
poResponse:Status = lrResponse::StatusUnauthorized
poResponse:ContentType = lrResponse::ContentTXT
poResponse:Body = "Unauthorized"
SINON
poResponse:Status = lrResponse::StatusOK
poResponse:ContentType = lrResponse::ContentTXT
poResponse:Body = "pong"
FINGetHeaderSubValue
📘 Présentation
Extrait une sous-valeur dans un header HTTP multi-valeur (exemples : boundary= ou cache-control=).
🧩 Prototypage
GetHeaderSubValue(pHeader est chaîne, pSubHeader est chaîne) : chaîne
🔧 Paramètres
| Nom | Type | Usage |
|---|---|---|
pHeader | chaîne | Nom du header (ex: Content-Type). |
pSubHeader | chaîne | Sous-header (ex: boundary). |
↩️ Valeurs retournées
| Type | Usage |
|---|---|
| chaîne | Valeur du SUB HEADER HTTP (Chaîne vide si absent) |
🧪 Exemple
- Lecture de la sous-valeur boundary d'un header Content-Type de type multipart/form-data
- Retour StatusBadRequest si la sous-valeur est absente (requête invalide / upload mal formé)
- Utile pour diagnostiquer rapidement un problème d'upload (par ex. depuis Postman / navigateur)
FONCTION UploadPOST(poRequest est objet lrRequest, poResponse est objet lrResponse)
sBoundary est chaîne
// Exemple attendu côté client :
// Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
sBoundary = poRequest:GetHeaderSubValue("Content-Type", "boundary")
SI sBoundary="" ALORS
poResponse:Status = lrResponse::StatusBadRequest
poResponse:ContentType = lrResponse::ContentTXT
poResponse:Body = "Missing boundary in Content-Type header"
SINON
poResponse:Status = lrResponse::StatusOK
poResponse:ContentType = lrResponse::ContentTXT
poResponse:Body = "Boundary detected: " + sBoundary
FINGetRouteValue
📘 Présentation
Renvoie la valeur d’une variable extraite de la route.
Par exemple, pour la route /tiers/123456, GetRouteValue("id") retournera 123456.
🧩 Prototypage
GetRouteValue(pTag est chaîne) : chaîne
🔧 Paramètres
| Nom | Type | Usage |
|---|---|---|
pTag | chaîne | Nom de la variable (ex: id). |
↩️ Valeurs retournées
| Type | Usage |
|---|---|
| chaîne | Valeur de la variable de ROUTE (chaîne vide si absente) |
🧪 Exemple
- Route de type /tiers/{id}
- Extraction de l'ID à partir de la route (variable {id})
- Recherche de l'enregistrement
- Conversion en variant avec la méthode lrResponse::RecordToVariant puis en JSON
- envoi de la réponse (ou StatusNotFound si absent)
FONCTION TiersGET(poRequest est objet lrRequest, poResponse est objet lrResponse)
sID est chaîne
vTiers est Variant
// Exemple de route appelée : /tiers/123456
sID = poRequest:GetRouteValue("id")
SI sID="" ALORS
// Normalement impossible si la route est bien déclarée, mais sécurise le code
poResponse:Status = lrResponse::StatusBadRequest
poResponse:ContentType = lrResponse::ContentTXT
poResponse:Body = "No ID provided"
RETOUR
FIN
SI hLitRecherchePremier("TIERS", "ID", sID) ALORS
vTiers = lrResponse::RecordToVariant("TIERS", "ID,NAME,CITY")
poResponse:Body = VariantVersJSON(vTiers)
poResponse:ContentType = lrResponse::ContentJSON
poResponse:Status = lrResponse::StatusOK
SINON
poResponse:Body = "Not found"
poResponse:ContentType = lrResponse::ContentTXT
poResponse:Status = lrResponse::StatusNotFound
FINGetURLValue
📘 Présentation
Renvoie la valeur d’un paramètre situé dans l'URL.
Exemple : Pour l'URL /tiers/123456?scope=full&country=FR, GetURLValue("country") retournera FR.
🧩 Prototypage
GetURLValue(pTag est chaîne) : chaîne
🔧 Paramètres
| Nom | Type | Usage |
|---|---|---|
pTag | chaîne | Nom du paramètre (ex: scope, country, q...). |
↩️ Valeurs retournées
| Type | Usage |
|---|---|
| chaîne | Valeur du paramètre d'URL (chaîne vide si la variable n'existe pas) |
🧪 Exemple
- Lecture de paramètres dans l'URL (query string)
- Exemple : /tiers/123456?scope=full&country=FR
- Application d'une valeur par défaut si le paramètre n'est pas fourni
FONCTION TiersGET_Scope(poRequest est objet lrRequest, poResponse est objet lrResponse)
sScope est chaîne
sCountry est chaîne
// Exemple appelé : /tiers/123456?scope=full&country=FR
sScope = poRequest:GetURLValue("scope")
sCountry = poRequest:GetURLValue("country")
SI sScope="" ALORS
sScope = "basic" // valeur par défaut
FIN
poResponse:Status = lrResponse::StatusOK
poResponse:ContentType = lrResponse::ContentTXT
poResponse:Body = "scope=" + sScope + ", country=" + sCountryVariantToSource
📘 Présentation
Copie les membres d'un variant vers un enregistrement (source de données).
Utile pour copier directement un flux reçu dans une requête REST dans un enregistement avant insertion ou mise à jour.
Vérifie l'existence de chaque membre dans la structure de la table avant affectation.
Utile pour copier directement un flux reçu dans une requête REST dans un enregistement avant insertion ou mise à jour.
Vérifie l'existence de chaque membre dans la structure de la table avant affectation.
🧩 Prototypage
VariantToSource(pVariant, pSource est Source de Données, pIDColumn est chaîne = "")
🔧 Paramètres
| Nom | Type | Usage |
|---|---|---|
pVariant | Variant | Données à copier. |
pSource | Source de Données | Source de données HFSQL cible. |
pIDColumn | chaîne | Rubrique ID à ignorer (optionnel). |
↩️ Valeurs retournées
(aucune)
🧪 Exemple
Endpoint d'import : réception d'un JSON les données d'un CLIENT :
- Conversion du JSON en Variant
- Affectation des membres de l'enregistrement CLIENT à partir des membres homonymes du variant
- Insertion en base HFSQL
FONCTION ClientPOST(poRequest est objet lrRequest, poResponse est objet lrResponse) sJSON est chaîne vData est Variant // Exemple de body JSON attendu : // {"NAME":"Dupont","FIRSTNAME":"Paul","CITY":"Paris"}, QUAND EXCEPTION DANS vData = JSONVersVariant(sJSON) FAIRE poResponse:Status = lrResponse::StatusBadRequest poResponse:ContentType = lrResponse::ContentTXT poResponse:Body = "Malformed JSON" RETOUR FIN // Copie des données vers un enregistrement CLIENT // "ID" est ignoré (si ID auto par exemple) poRequest:VariantToSource(vData, CLIENT, "ID") //Ici on peut vérifier la validité des données avant de les insérer hAjoute(CLIENT) poResponse:Status = lrResponse::StatusCreated poResponse:ContentType = lrResponse::ContentTXT poResponse:Body = "Import done"
