LightREST

Composant Serveur API REST pour WinDev®
Léger.
Rapide.
Gratuit.
Sans licence Serveur.

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.

MembreTypeDescription
BodyChaineContenu de la réponse
StatusEntierCode de retour.
Doit correspondre à une constante lrResponse::Status
ContentTypeChaineType de contenu de la réponse (TYPE MIME),
Doit correspondre à une constante lrResponse::Content
HeadersTableau Associatif de ChainesPermet de renvoyer des données au client sous forme de paire Tag/Valeur dans l’entête HTTP
IsBinaryBooléenIndique 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.

ConstanteValeurMessageDescription
StatusOK200OKRequête traitée avec succès. La réponse dépendra de la méthode de requête utilisée.
StatusCreated201CreatedRequête traitée avec succès et création d’un document.
StatusAccepted202AcceptedRequête traitée, mais sans garantie de résultat.
StatusNoContent204No ContentRequête traitée avec succès mais pas d’information à renvoyer.
StatusBadRequest400Bad RequestLa syntaxe de la requête est erronée.
StatusUnauthorized401UnauthorizedUne authentification est nécessaire pour accéder à la ressource.
StatusForbidden403ForbiddenLe 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.
StatusNotFound404Not FoundRessource non trouvée.
StatusMethodNotAllowed405Method Not AllowedMéthode de requête non autorisée.
StatusInternalServerError500Internal Server ErrorErreur 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.

ConstanteType MIMEDescription
ContentJSONapplication/jsonDonnées au format JSON
ContentXMLapplication/xmlDonnées au format XML
ContentTXTtext/plainTexte CSV
ContentHTMLtext/htmlHTML
ContentGIFimage/gifImage GIF
ContentBMPimage/bmpImage BMP
ContentJPGimage/jpegImage JPG / JPEG
ContentPNGimage/pngImage PNG
ContentTIFFimage/tiffImage TIFF
ContentPDFapplication/pdfPDF
ContentZIPapplication/zipZIP
ContentBINapplication/octet-streamDonnées binaires
ContentCSVtext/csvTexte CSV

MéthodeUtilisation
DataSourceToVariantConvertit une source de données Hyperfile vers un Variant ou un Tableau de Variants
SetHeaderValueDé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ètreTypeDescription
DonnéesSource de donnéesSource de données à transformer en Variant
Force ArrayBooléénFacultatif : 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ètreTypeDescription
EntêteChaîneNom de l’entête à initialiser
ValeurChaîneValeur à 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