Aller au contenu

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

NomTypeUsage
BodyBufferContenu de la réponse (texte ou binaire selon IsBinary).

Le format doit être cohérent avec le membre :ContentType
ContentTypechaîneIndique 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, ...)
ℹ Si ce membre n'est pas renseigné, le moteur LightREST indiquera ContentJSON par défaut, et enverra un événement de type EVE_WARNING (si un Hook a été déclaré)..
Headerstableau associatif (ccSansCasse+AvecDoublon) de chaînesHeaders 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()
IsBinarybooléenIndique que le membre :Body contient du binaire.

Ce membre est positionné automatiquement à vrai lors de l'appel à la méthode :SetBinaryContent()
StatusentierStatus 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)

NomTypeUsage
ContentJSONchaîneType MIME JSON (application/json)
ContentTXTchaîneType MIME texte (text/plain)
ContentHTMLchaîneType MIME HTML (text/html)
ContentXMLchaîneType MIME XML (application/xml)
ContentCSVchaîneType MIME CSV (text/csv)
ContentPDFchaîneType MIME PDF (application/pdf)
ContentPNGchaîneType MIME image PNG (image/png)
ContentJPGchaîneType MIME image JPEG (image/jpeg)
ContentGIFchaîneType MIME image GIF (image/gif)
ContentWEBPchaîneType MIME image WebP (image/webp)
ContentSVGchaîneType MIME SVG (image/svg+xml)
ContentZIPchaîneType MIME ZIP (application/zip)
ContentBINchaîneType MIME binaire générique (application/octet-stream)

Statuts HTTP courants (valeurs possibles de la propriété :Status)

NomTypeUsage
StatusOKentier200 - Requête traitée avec succès.
StatusCreatedentier201 - Ressource créée.
StatusAcceptedentier202 - Requête acceptée (traitement asynchrone possible, succès non garanti).
StatusNonAuthoritativeInformationentier203 - 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.
StatusNoContententier204 - Succès sans contenu.
StatusResetContententier205 - La requête a été traitée avec succès et que le client doit réinitialiser l'affichage du document.
StatusPartialContententier206 - Contenu partiel (Range).
Statusentier300 - Requête prise en compte par le serveur mais ne peut pas aboutir sans l'action du client
StatusMovedPermanentlyentier301 - Redirection permanente.
StatusFoundentier302 - Redirection temporaire.
StatusSeeOtherentier303 - Temporairement déplacé.
StatusNotModifiedentier304 - 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é.
StatusUseProxyentier305 - La ressource n'est accessible que par le biais du proxy spécifié dans l'en-tête.
StatusTemporaryRedirectentier307 - Redirection temporaire sans changement de méthode.
StatusPermanentRedirectentier308 - Redirection permanente sans changement de méthode.
StatusBadRequestentier400 - Syntaxe de requête erronée.
StatusUnauthorizedentier401 - Authentification incorrecte ou manquante.
StatusForbiddenentier403 - Accès refusé en raison d'un manque de permissions.
StatusNotFoundentier404 - Ressource non trouvée.
StatusMethodNotAllowedentier405 - Méthode non autorisée.
StatusRequestTimeoutentier408 - Temps d'attente écoulé côté serveur.
StatusConflictentier409 - Conflit avec l'état actuel du serveur.
StatusGoneentier410 - Ressource supprimée, aucune redirection connue.
StatusRequestEntityTooLargeentier413 - Requête trop volumineuse.
StatusRequestURITooLongentier414 - URI trop longue.
StatusUnsupportedMediaTypeentier415 - Format non supporté.
StatusUnprocessableEntityentier422 - Entité incompréhensible ou incomplète.
StatusTooManyRequestsentier429 - Trop de requêtes dans un délai donné.
StatusInternalServerErrorentier500 - Erreur interne serveur.
StatusNotImplementedentier501 - Fonctionnalité non supportée.
StatusBadGatewayentier502 - Réponse invalide d'un serveur amont.
StatusServiceUnavailableentier503 - Service indisponible.
StatusGatewayTimeoutentier504 - Timeout d'un serveur amont.

Statuts HTTP occasionnels (valeurs possibles de la propriété :Status)

NomTypeUsage
StatusContinueentier100 - La requête est en cours de traitement.
StatusSwitchingProtocolsentier101 - Changement de protocole accepté.
StatusProcessingentier102 - Traitement en cours (évite un timeout côté client).
StatusEarlyHintsentier103 - Envoi anticipé de liens avant réponse définitive.
StatusNonAuthoritativeInfoentier203 - Contenu modifié par un proxy.
StatusResetContententier205 - Réinitialiser l'affichage côté client.
StatusMultiStatusentier207 - Réponse multiple.
StatusAlreadyReportedentier208 - Déjà reporté dans cette collection.
StatusContentDifferententier210 - Contenu différent entre client et serveur (delta).
StatusIMUsedentier226 - Réponse encodée sous forme de delta.
StatusMultipleChoicesentier300 - URI correspondant à plusieurs ressources.
StatusUseProxyentier305 - Requête à ré-adresser via un proxy.
StatusTooManyRedirectsentier310 - Trop de redirections / boucle de redirection.
StatusPaymentRequiredentier402 - Paiement requis.
StatusNotAcceptableentier406 - Aucun format acceptable selon les en-têtes Accept.
StatusProxyAuthRequiredentier407 - Authentification proxy requise.
StatusLengthRequiredentier411 - Longueur de requête non précisée.
StatusPreconditionFailedentier412 - Précondition(s) non vérifiée(s).
StatusRequestedRangeNotSatisfiableentier416 - En-tête Range invalide.
StatusExpectationFailedentier417 - Expectation insatisfaite.
StatusTeapotentier418 - Je suis une théière (RFC 2324 / 1er avril).
StatusPageExpiredentier419 - Ressource expirée.
StatusBadMappingentier421 - Requête envoyée à un serveur incapable de répondre (connexion réutilisée, etc.).
StatusLockedentier423 - Ressource verrouillée.
StatusMethodFailureentier424 - Échec dû à une autre opération (dépendance).
StatusTooEarlyentier425 - Trop tôt (risque de rejeu).
StatusUpdateRequiredentier426 - Mise à niveau requise (ex: upgrade vers TLS).
StatusInvalidDigitalSignatureentier427 - Signature numérique invalide.
StatusPreconditionRequiredentier428 - Requête doit être conditionnelle.
StatusRequestHeaderFieldsTooLargeentier431 - En-têtes HTTP trop volumineux.
StatusNoResponseentier444 - Aucune réponse renvoyée, connexion fermée.
StatusRetryWithentier449 - Réessayer après action préalable.
StatusBlockedByWParentalControlsentier450 - Bloqué par contrôle parental Windows.
StatusUnavailableForLegalReasonsentier451 - Indisponible pour raison légale.
StatusSSLCertificateErrorentier495 - Certificat client invalide (extension).
StatusSSLCertificateRequiredentier496 - Certificat client requis (extension).
StatusHTTPRequestSenttoHTTPSPortentier497 - Requête HTTP envoyée vers port HTTPS (extension).
StatusTokenExpiredOrInvalidentier498 - Jeton expiré ou invalide.
StatusClientClosedRequestentier499 - Client a fermé la connexion avant réponse.
StatusHTTPVersionNotSupportedentier505 - Version HTTP non supportée.
StatusVariantAlsoNegotiatesentier506 - Erreur de négociation.
StatusInsufficientStorageentier507 - Espace insuffisant.
StatusLoopDetectedentier508 - Boucle détectée.
StatusBandwidthLimitExceededentier509 - Dépassement de quota/bande passante.
StatusNotExtendedentier510 - Requête ne respecte pas une politique étendue.
StatusNetworkAuthenticationRequiredentier511 - 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
NomTypeUsage
pSourceSource de DonnéesSource positionnée sur un enregistrement.
pColumnschaîneListe de rubriques séparées par virgules, ou *.

↩️ Valeurs retournées
TypeUsage
VariantObjet 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"
FIN

SetBinaryContent

📘 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
NomTypeUsage
pContentBufferContenu binaire
pContentTypechaîneMIME 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::StatusOK

SetHeaderValue

📘 Présentation
Affecte une valeur à un header de réponse.

🧩 Prototypage
SetHeaderValue(pTag est chaîne, pValue est chaîne)

🔧 Paramètres
NomTypeUsage
pTagchaîneNom du header.
pValuechaîneValeur.

↩️ 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 poResponse

SourceToVariant

📘 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
NomTypeUsage
pSourceSource de DonnéesSource HFSQL.
pColumnschaîneListe de rubriques séparées par virgules, ou *.

↩️ Valeurs retournées
TypeUsage
VariantListe (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