La classe LrResponse
La classe lrResponse permet à la fonction WinDev® (ou Procédure REST) lancée lors de l’appel à une route REST, de renvoyer du contenu à l’appelant.
Elle implémente les Membres, Constantes et Méthodes décrites ci-dessous.
Membre | Type | Description |
---|---|---|
Body | Chaine | Contenu de la réponse |
Status | Entier | Code de retour. Doit correspondre à une constante lrResponse::Status |
ContentType | Chaine | Type de contenu de la réponse (TYPE MIME), Doit correspondre à une constante lrResponse::Content |
Headers | Tableau Associatif de Chaines | Permet de renvoyer des données au client sous forme de paire Tag/Valeur dans l’entête HTTP |
IsBinary | Booléen | Indique que le contenu de la réponse est en binaire (par exemple de type image). Dans ce cas le membre Body contient des données binaires non encodées et retournées telles quelles à l’appelant. Faux par défaut. |
Constantes de type “Status” : Utilisées pour renseigner lrResponse:Status
Ci-dessous les statuts couramment utilisés. La liste complète ICI.
Constante | Valeur | Message | Description |
---|---|---|---|
StatusOK | 200 | OK | Requête traitée avec succès. La réponse dépendra de la méthode de requête utilisée. |
StatusCreated | 201 | Created | Requête traitée avec succès et création d’un document. |
StatusAccepted | 202 | Accepted | Requête traitée, mais sans garantie de résultat. |
StatusNoContent | 204 | No Content | Requête traitée avec succès mais pas d’information à renvoyer. |
StatusBadRequest | 400 | Bad Request | La syntaxe de la requête est erronée. |
StatusUnauthorized | 401 | Unauthorized | Une authentification est nécessaire pour accéder à la ressource. |
StatusForbidden | 403 | Forbidden | Le serveur a compris la requête, mais refuse de l’exécuter. Contrairement à l’erreur 401, s’authentifier ne fera aucune différence. Sur les serveurs où l’authentification est requise, cela signifie généralement que l’authentification a été acceptée mais que les droits d’accès ne permettent pas au client d’accéder à la ressource. |
StatusNotFound | 404 | Not Found | Ressource non trouvée. |
StatusMethodNotAllowed | 405 | Method Not Allowed | Méthode de requête non autorisée. |
StatusInternalServerError | 500 | Internal Server Error | Erreur interne du serveur. |
Constantes de type “Content” : utilisées pour renseigner lrResponse:ContentType.
Cette liste n’est pas exhaustive, il est possible d’utiliser n’importe quel type MIME référencé ICI.
Constante | Type MIME | Description |
---|---|---|
ContentJSON | application/json | Données au format JSON |
ContentXML | application/xml | Données au format XML |
ContentTXT | text/plain | Texte CSV |
ContentHTML | text/html | HTML |
ContentGIF | image/gif | Image GIF |
ContentBMP | image/bmp | Image BMP |
ContentJPG | image/jpeg | Image JPG / JPEG |
ContentPNG | image/png | Image PNG |
ContentTIFF | image/tiff | Image TIFF |
ContentPDF | application/pdf | |
ContentZIP | application/zip | ZIP |
ContentBIN | application/octet-stream | Données binaires |
ContentCSV | text/csv | Texte CSV |
Méthode | Utilisation |
---|---|
DataSourceToVariant | Convertit une source de données Hyperfile vers un Variant ou un Tableau de Variants |
SetHeaderValue | Définit la valeur d’un entête (HEADER) à retourner à l’appelant |
Méthode DataSourceToVariant(Données, Force Array) : Variant
Transformation d’une source de données HyperFileSQL dans un variant transmissible au client REST.
Si la source de données contient 1 seul enregistrement, le variant contiendra toutes les colonnes de l’enregistrement (sauf si Force Array = vrai).
Si la source de données contient plusieurs enregistrements, la fonction retournera un variant composé d’un tableau de variants (une itération par enregistrement).
On obtient ainsi des données directement exploitables par le client.
Paramètre | Type | Description |
---|---|---|
Données | Source de données | Source de données à transformer en Variant |
Force Array | Booléén | Facultatif : Valeur par défaut = Faux Si vrai, un tableau de 1 élément sera généré, même si la source de données ne contient qu’un seul enregistrement. |
Retour : Variant : Contient tous les enregistrements de la source de données, prêts au retourner au client REST
Exemple :
sdData est source de données
oResponse est lrResponse
jsData est JSON
vMyData est variant
// ...
// Placer ici l'initialisation d'une source de données avec les fonctions HyperfileSQL
// ...
vMyData = oResponse:RecordsToVariant(sdData)
jsData.records = vMyData
stResponse:Body = jsData.VersChaine()
stResponse:ContentType = lrResponse::ContentJSON
...
...
RENVOYER oResponse
Méthode SetHeaderValue(Entête, Valeur)
Affecte une valeur à une entête (HEADER) de la réponse REST
Paramètre | Type | Description |
---|---|---|
Entête | Chaîne | Nom de l’entête à initialiser |
Valeur | Chaîne | Valeur à mémoriser |
Retour : Aucun
Exemple :
Dans cet exemple, le client recevra une réponse HTTP, dans l’entête de laquelle il aura l’horodatage de l’exécution dans l’entête TIMESTAMP
PROCEDURE pg_MaRoute(pRequest est lrRequest) : lrResponse
oResponse est lrResponse
oResponse:SetHeaderValue("TIMESTAMP", DateSys()+HeureSys())
oResponse:Body = "Timestamp envoyé dans le HEADER"
oResponse:ContentType = lrResponse::ContentTXT
oResponse:Status = lrResponse::StatusOK
RENVOYER oResponse