Classe lrResponse¶
Role
Définit la réponse HTTP renvoyée par le Handler REST : code statut, content-type, headers et body
Membres et propriétés
| Nom | Type | Usage |
|---|---|---|
Body | Buffer | Contenu de la réponse (texte ou binaire selon IsBinary). Le format doit être cohérent avec le membre :ContentType |
ContentType | chaîne | Indique le type MIME du contenu envoyé dans le membre :Body Contient généralement une des constantes Content de la classe (exemples : ContentJSON, ContentJPG, ContentZIP, ...) |
Headers | tableau associatif (ccSansCasse+AvecDoublon) de chaînes | Headers HTTP de la réponse. Tableau contenant les HEADERS ajoutés avec la méthode :SetHeaderValue(), mais aussi ceux définis globalement au niveau du serveur LightREST avec les méthodes lrServer:SetGlobalHeader() et lrServer:SetGlobalHeaders() |
IsBinary | booléen | Indique que le membre :Body contient du binaire. Ce membre est positionné automatiquement à vrai lors de l'appel à la méthode :SetBinaryContent() |
Status | entier | Status HTTP de la réponse. Contient habituellement une des constantes :Status*. Si ce membre n'est pas renseigné, le moteur LightREST indiquera StatusOK* (=200) par défaut. |
Constantes
Constantes MIME (valeurs possibles de la propriété :ContentType)¶
| Nom | Type | Usage |
|---|---|---|
ContentJSON | chaîne | Type MIME JSON (application/json) |
ContentTXT | chaîne | Type MIME texte (text/plain) |
ContentHTML | chaîne | Type MIME HTML (text/html) |
ContentXML | chaîne | Type MIME XML (application/xml) |
ContentCSV | chaîne | Type MIME CSV (text/csv) |
ContentPDF | chaîne | Type MIME PDF (application/pdf) |
ContentPNG | chaîne | Type MIME image PNG (image/png) |
ContentJPG | chaîne | Type MIME image JPEG (image/jpeg) |
ContentGIF | chaîne | Type MIME image GIF (image/gif) |
ContentWEBP | chaîne | Type MIME image WebP (image/webp) |
ContentSVG | chaîne | Type MIME SVG (image/svg+xml) |
ContentZIP | chaîne | Type MIME ZIP (application/zip) |
ContentBIN | chaîne | Type MIME binaire générique (application/octet-stream) |
Statuts HTTP courants (valeurs possibles de la propriété :Status)¶
| Nom | Type | Usage |
|---|---|---|
StatusOK | entier | 200 - Requête traitée avec succès. |
StatusCreated | entier | 201 - Ressource créée. |
StatusAccepted | entier | 202 - Requête acceptée (traitement asynchrone possible, succès non garanti). |
StatusNonAuthoritativeInformation | entier | 203 - La requête a réussi, mais un mandataire a modifié les en-têtes ou le contenu inclus de la réponse 200 (OK) du serveur d'origine. |
StatusNoContent | entier | 204 - Succès sans contenu. |
StatusResetContent | entier | 205 - La requête a été traitée avec succès et que le client doit réinitialiser l'affichage du document. |
StatusPartialContent | entier | 206 - Contenu partiel (Range). |
Status | entier | 300 - Requête prise en compte par le serveur mais ne peut pas aboutir sans l'action du client |
StatusMovedPermanently | entier | 301 - Redirection permanente. |
StatusFound | entier | 302 - Redirection temporaire. |
StatusSeeOther | entier | 303 - Temporairement déplacé. |
StatusNotModified | entier | 304 - La ressource n'a pas été modifiée depuis la dernière requête possibilité d'utiliser la version en cache pour plus d'efficacité. |
StatusUseProxy | entier | 305 - La ressource n'est accessible que par le biais du proxy spécifié dans l'en-tête. |
StatusTemporaryRedirect | entier | 307 - Redirection temporaire sans changement de méthode. |
StatusPermanentRedirect | entier | 308 - Redirection permanente sans changement de méthode. |
StatusBadRequest | entier | 400 - Syntaxe de requête erronée. |
StatusUnauthorized | entier | 401 - Authentification incorrecte ou manquante. |
StatusForbidden | entier | 403 - Accès refusé en raison d'un manque de permissions. |
StatusNotFound | entier | 404 - Ressource non trouvée. |
StatusMethodNotAllowed | entier | 405 - Méthode non autorisée. |
StatusRequestTimeout | entier | 408 - Temps d'attente écoulé côté serveur. |
StatusConflict | entier | 409 - Conflit avec l'état actuel du serveur. |
StatusGone | entier | 410 - Ressource supprimée, aucune redirection connue. |
StatusRequestEntityTooLarge | entier | 413 - Requête trop volumineuse. |
StatusRequestURITooLong | entier | 414 - URI trop longue. |
StatusUnsupportedMediaType | entier | 415 - Format non supporté. |
StatusUnprocessableEntity | entier | 422 - Entité incompréhensible ou incomplète. |
StatusTooManyRequests | entier | 429 - Trop de requêtes dans un délai donné. |
StatusInternalServerError | entier | 500 - Erreur interne serveur. |
StatusNotImplemented | entier | 501 - Fonctionnalité non supportée. |
StatusBadGateway | entier | 502 - Réponse invalide d'un serveur amont. |
StatusServiceUnavailable | entier | 503 - Service indisponible. |
StatusGatewayTimeout | entier | 504 - Timeout d'un serveur amont. |
Statuts HTTP occasionnels (valeurs possibles de la propriété :Status)¶
| Nom | Type | Usage |
|---|---|---|
StatusContinue | entier | 100 - La requête est en cours de traitement. |
StatusSwitchingProtocols | entier | 101 - Changement de protocole accepté. |
StatusProcessing | entier | 102 - Traitement en cours (évite un timeout côté client). |
StatusEarlyHints | entier | 103 - Envoi anticipé de liens avant réponse définitive. |
StatusNonAuthoritativeInfo | entier | 203 - Contenu modifié par un proxy. |
StatusResetContent | entier | 205 - Réinitialiser l'affichage côté client. |
StatusMultiStatus | entier | 207 - Réponse multiple. |
StatusAlreadyReported | entier | 208 - Déjà reporté dans cette collection. |
StatusContentDifferent | entier | 210 - Contenu différent entre client et serveur (delta). |
StatusIMUsed | entier | 226 - Réponse encodée sous forme de delta. |
StatusMultipleChoices | entier | 300 - URI correspondant à plusieurs ressources. |
StatusUseProxy | entier | 305 - Requête à ré-adresser via un proxy. |
StatusTooManyRedirects | entier | 310 - Trop de redirections / boucle de redirection. |
StatusPaymentRequired | entier | 402 - Paiement requis. |
StatusNotAcceptable | entier | 406 - Aucun format acceptable selon les en-têtes Accept. |
StatusProxyAuthRequired | entier | 407 - Authentification proxy requise. |
StatusLengthRequired | entier | 411 - Longueur de requête non précisée. |
StatusPreconditionFailed | entier | 412 - Précondition(s) non vérifiée(s). |
StatusRequestedRangeNotSatisfiable | entier | 416 - En-tête Range invalide. |
StatusExpectationFailed | entier | 417 - Expectation insatisfaite. |
StatusTeapot | entier | 418 - Je suis une théière (RFC 2324 / 1er avril). |
StatusPageExpired | entier | 419 - Ressource expirée. |
StatusBadMapping | entier | 421 - Requête envoyée à un serveur incapable de répondre (connexion réutilisée, etc.). |
StatusLocked | entier | 423 - Ressource verrouillée. |
StatusMethodFailure | entier | 424 - Échec dû à une autre opération (dépendance). |
StatusTooEarly | entier | 425 - Trop tôt (risque de rejeu). |
StatusUpdateRequired | entier | 426 - Mise à niveau requise (ex: upgrade vers TLS). |
StatusInvalidDigitalSignature | entier | 427 - Signature numérique invalide. |
StatusPreconditionRequired | entier | 428 - Requête doit être conditionnelle. |
StatusRequestHeaderFieldsTooLarge | entier | 431 - En-têtes HTTP trop volumineux. |
StatusNoResponse | entier | 444 - Aucune réponse renvoyée, connexion fermée. |
StatusRetryWith | entier | 449 - Réessayer après action préalable. |
StatusBlockedByWParentalControls | entier | 450 - Bloqué par contrôle parental Windows. |
StatusUnavailableForLegalReasons | entier | 451 - Indisponible pour raison légale. |
StatusSSLCertificateError | entier | 495 - Certificat client invalide (extension). |
StatusSSLCertificateRequired | entier | 496 - Certificat client requis (extension). |
StatusHTTPRequestSenttoHTTPSPort | entier | 497 - Requête HTTP envoyée vers port HTTPS (extension). |
StatusTokenExpiredOrInvalid | entier | 498 - Jeton expiré ou invalide. |
StatusClientClosedRequest | entier | 499 - Client a fermé la connexion avant réponse. |
StatusHTTPVersionNotSupported | entier | 505 - Version HTTP non supportée. |
StatusVariantAlsoNegotiates | entier | 506 - Erreur de négociation. |
StatusInsufficientStorage | entier | 507 - Espace insuffisant. |
StatusLoopDetected | entier | 508 - Boucle détectée. |
StatusBandwidthLimitExceeded | entier | 509 - Dépassement de quota/bande passante. |
StatusNotExtended | entier | 510 - Requête ne respecte pas une politique étendue. |
StatusNetworkAuthenticationRequired | entier | 511 - Authentification réseau requise (portail captif). |
Méthodes¶
RecordToVariant
📘 Présentation
Convertit l’enregistrement courant d’une source HFSQL en Variant.
🧩 Prototypage
RecordToVariant(pSource est Source de Données, pColumns est chaîne = "*") : Variant
🔧 Paramètres
| Nom | Type | Usage |
|---|---|---|
pSource | Source de Données | Source positionnée sur un enregistrement. |
pColumns | chaîne | Liste de rubriques séparées par virgules, ou *. |
↩️ Valeurs retournées
| Type | Usage |
|---|---|
| Variant | Objet Variant représentant l’enregistrement. |
🧪 Exemple
- Lecture d'un enregistrement HFSQL (client recherché par ID)
- Conversion de l'enregistrement courant en Variant pour simplifier la sérialisation
- Renvoi du Variant au format JSON au client REST
FONCTION ClientGET(poRequest est objet lrRequest, poResponse est objet lrResponse)
vClient est Variant
sID est chaîne = poRequest:GetRouteValue("id")
SI sID="" ALORS
poResponse:Status = lrResponse::StatusBadRequest
poResponse:ContentType = lrResponse::ContentTXT
poResponse:Body = "No ID provided"
RETOUR
FIN
SI hLitRecherchePremier("CLIENT", "ID", sID) ALORS
vClient = lrResponse::RecordToVariant(CLIENT, "ID,NAME,FIRSTNAME,CITY")
poResponse:Status = lrResponse::StatusOK
poResponse:ContentType = lrResponse::ContentJSON
poResponse:Body = VariantVersJSON(vClient)
SINON
poResponse:Status = lrResponse::StatusNotFound
poResponse:ContentType = lrResponse::ContentTXT
poResponse:Body = "Client not found"
FINSetBinaryContent
📘 Présentation
Configure une réponse binaire (:Body=buffer, :IsBinary=Vrai), et renseigne le membre :ContentType si fourni
🧩 Prototypage
SetBinaryContent(pContent est Buffer, pContentType est chaîne="")
🔧 Paramètres
| Nom | Type | Usage |
|---|---|---|
pContent | Buffer | Contenu binaire |
pContentType | chaîne | MIME type (optionnel). |
↩️ Valeurs retournées
(aucune)
🧪 Exemple
- Renvoi d'un fichier binaire (ex: image PNG) depuis un endpoint REST
- Lecture du fichier dans un Buffer
- Remplissage automatique de :Body et :IsBinary via SetBinaryContent
FONCTION LogoGET(poRequest est objet lrRequest, poResponse est objet lrResponse)
bufImg est Buffer
bufImg = fChargeBuffer("c:\img\logo.png")
SI Taille(bufImg)=0 ALORS
poResponse:Status = lrResponse::StatusNotFound
poResponse:ContentType = lrResponse::ContentTXT
poResponse:Body = "File not found"
RETOUR
FIN
poResponse:SetBinaryContent(bufImg, lrResponse::ContentPNG)
poResponse:Status = lrResponse::StatusOKSetHeaderValue
📘 Présentation
Affecte une valeur à un header de réponse.
🧩 Prototypage
SetHeaderValue(pTag est chaîne, pValue est chaîne)
🔧 Paramètres
| Nom | Type | Usage |
|---|---|---|
pTag | chaîne | Nom du header. |
pValue | chaîne | Valeur. |
↩️ Valeurs retournées
(aucune)
🧪 Exemple
- Ajout d'un header HTTP applicatif (ex: identifiant de corrélation pour tracer une requête)
- Renvoi d'une réponse simple "OK"
- Pratique pour diagnostiquer des appels côté client (log, monitoring, support)
FONCTION Ping(poRequest est objet lrRequest <utile>, poResponse est objet lrResponse)
sReqID est chaîne = DonneUUID()
poResponse:SetHeaderValue("X-Request-ID", sReqID)
poResponse:Status = poResponse::StatusOK
poResponse:ContentType = poResponse::ContentTXT
poResponse:Body = "pong"
RENVOYER poResponseSourceToVariant
📘 Présentation
Convertit une source HFSQL en tableau de Variants.
🧩 Prototypage
SourceToVariant(pSource est Source de Données, pColumns est chaîne = "*") : Variant
🔧 Paramètres
| Nom | Type | Usage |
|---|---|---|
pSource | Source de Données | Source HFSQL. |
pColumns | chaîne | Liste de rubriques séparées par virgules, ou *. |
↩️ Valeurs retournées
| Type | Usage |
|---|---|
| Variant | Liste (tableau) de Variants. |
🧪 Exemple
- Liste des enregistrements d'une table HFSQL (ex: CLIENT)
- Conversion de l'ensemble en tableau de Variants
- Renvoi au format JSON (endpoint REST de type /clients)
FONCTION ClientsGET(poRequest est objet lrRequest <utile>, poResponse est objet lrResponse)
vClients est Variant
SI hNbEnr(CLIENT)=0 ALORS
poResponse:Status = lrResponse::StatusNotFound
SINON
vClient = lrResponse::SourceToVariant(CLIENT, "ID,NAME,FIRSTNAME,CITY")
poResponse:Status = lrResponse::StatusOK
poResponse:ContentType = lrResponse::ContentJSON
poResponse:Body = VariantVersJSON(vClients)
fin