IncomingMessage
La classe 4D.IncomingMessage
vous permet de gérer l'objet reçu par un HTTP request handler personnalisé. Les requêtes HTTP et leurs propriétés sont automatiquement reçues en tant qu'instance de la classe 4D.IncomingMessage
. Les paramètres fournis directement dans la requête avec le verbe GET sont gérés par la propriété .urlQuery
, tandis que les paramètres passés dans le corps de la requête sont disponibles via des fonctions telles que .getBlob()
ou getText()
.
Le gestionnaire de requêtes HTTP peut renvoyer n'importe quelle valeur (ou rien). Il renvoie généralement une instance de la classe 4D.OutgoingMessage
.
Toutes les propriétés de cette classe sont en lecture seule. Elles sont automatiquement remplies par le request handler.
Historique
Release | Modifications |
---|---|
20 R8 | Classe ajoutée |
Exemple
Le fichier HTTPHandlers.json suivant a été défini :
[
{
"class": "GeneralHandling",
"method": "gettingStarted",
"pattern": "start",
"verbs": "get, post"
}
]
La requête http://127.0.0.1/start/example?param=demo&name=4D
est exécutée avec un verbe GET
dans un navigateur. Elle est gérée par la fonction gettingStarted de la classe singleton GeneralHandling suivante :
shared singleton Class constructor()
Function gettingStarted($request : 4D.IncomingMessage) : 4D.OutgoingMessage
var $result:=4D.OutgoingMessage.new()
var $body : Text
$body:="Called URL: "+$request.url+"\n"
$body+="The parameters are received as an object: \n"+JSON Stringify($request.urlQuery; *)+"\n"
$body+="The verb is: "+$request.verb+"\n"
$body+="There are "+String($request.urlPath.length)+" url parts - Url parts are: "\
+$request.urlPath.join(" - ")+"\n\n"
$result.setBody($body)
$result.setHeader("Content-Type"; "text/plain")
return $result
La requête est reçue sur le serveur en tant que $request, une instance d'objet de la classe 4D.IncomingMessage
.
Voici la réponse :
Called URL: /start/example? param=demo&name=4D
The parameters are received as an object:
{
"param": "demo",
"name": "4D"
}
The verb is: GET
There are 2 url parts - Url parts are: start - example
Objet IncomingMessage
Les objets 4D.IncomingMessage offrent les propriétés et fonctions suivantes :
.getBlob() : Blob renvoie le body de la requête sous forme de Blob |
.getHeader( key : Text ) : Text renvoie la valeur de l'en-tête key |
.getJSON() : Variant renvoie le body de la requête sous forme de résolution JSON |
.getPicture() : Picture renvoie le body de la requête sous forme d'image (dans le cas d'un body envoyé en tant qu'image) |
.getText() : Text renvoie le body de la requête sous forme de texte |
headers : Object les headers courants du message entrant sous forme de paires clé/valeur (chaînes) |
url : Text l'URL de la requête sans la partie IP:port et sous forme de chaîne |
urlPath : Collection l'URL de la requête sans la partie IP:port et sous la forme d'une collection de chaînes |
urlQuery : Object les paramètres de la requête lorsqu'ils ont été passés dans l'URL sous forme de paires clé/valeur |
verb : Text le verbe utilisé par la requête |
Un objet 4D.IncomingMessage est non partageable.
.getBlob()
.getBlob() : Blob
Paramètres | Type | Description | |
---|---|---|---|
Résultat | Blob | <- | Body de la requête en tant que Blob |
Description
La fonction .getBlob()
renvoie le body de la requête sous forme de Blob.
Si le body n'a pas été fourni sous forme de contenu binaire, la fonction tente de convertir la valeur, mais elle peut donner des résultats inattendus.
.getHeader()
.getHeader( key : Text ) : Text
Paramètres | Type | Description | |
---|---|---|---|
key | Text | -> | Propriété de header (en-tête) à obtenir |
Résultat | Text | <- | Valeur de la propriété de header |
Description
La fonction .getHeader()
renvoie la valeur de l'en-tête key.
Le paramètre key n'est pas sensible à la casse.
Exemple
var $value : Texte
var $request : 4D.IncomingMessage
$value := $request.getHeader("content-type")
.getJSON()
.getJSON() : Variant
Paramètres | Type | Description | |
---|---|---|---|
Résultat | Variant | <- | Résolution JSON du body de la requête |
Description
La fonction .getJSON()
renvoie le body de la requête sous forme de résolution JSON.
Si le body n'a pas été fourni sous la forme d'un contenu JSON valide, une erreur est générée.
.getPicture()
.getPicture() : Picture
Paramètres | Type | Description | |
---|---|---|---|
Résultat | Picture | <- | Body de la requête en tant qu'image |
Description
La fonction .getPicture()
renvoie le body de la requête sous forme d'image (dans le cas d'un body envoyé en tant qu'image).
Le content-type doit être fourni dans les headers pour indiquer que le body est une image.
Si la requête est construite en utilisant la classe HTTPRequest
, l'image doit être envoyée dans le body sous forme de Blob avec le content-type approprié.
Si le body n'est pas reçu comme une image valide, la fonction renvoie null.
.getText()
.getText() : Text
Paramètres | Type | Description | |
---|---|---|---|
Résultat | Text | <- | Body de la requête en tant que texte |
Description
La fonction .getText()
renvoie le body de la requête sous forme de texte.
Si le body n'a pas été fourni sous forme de chaine, la fonction tente de convertir la valeur, mais elle peut donner des résultats inattendus.
.headers
headers : Object
Description
La propriété .headers
contient les headers courants du message entrant sous forme de paires clé/valeur (chaînes).
La propriété .headers
est en lecture seule.
Les noms des en-têtes (clés) sont en minuscules. Les noms des headers sont sensibles à la casse.
.url
url : Text
Description
La propriété .url
contient l'URL de la requête sans la partie IP:port et sous forme de chaîne.
Par exemple, si la requête est adressée à: "http://127.0.0.1:80/docs/invoices/today", la propriété .url
est "/docs/invoices/today".
La propriété .url
est en lecture seule.
La partie "host" de la requête (IP:port) est fournie par le header host
.
.urlPath
urlPath : Collection
Description
La propriété .urlPath
contient l'URL de la requête sans la partie IP:port et sous la forme d'une collection de chaînes.
Par exemple, si la requête est adressée à: "http://127.0.0.1:80/docs/invoices/today", la propriété .urlPath
est ["docs", "invoices" ,"today"].
La propriété .urlPath
est en lecture seule.
.urlQuery
urlQuery : Object
Description
La propriété .urlQuery
contient les paramètres de la requête lorsqu'ils ont été passés dans l'URL sous forme de paires clé/valeur.
La propriété .urlQuery
est en lecture seule.
Les paramètres peuvent être passés dans l'URL des requêtes directement ou en tant que contenu JSON.
Paramètres directs
Exemple : http://127.0.0.1:8044/myCall?firstname=Marie&id=2&isWoman=true
Dans ce cas, les paramètres sont reçus sous forme de valeurs "stringifiées" dans la propriété urlQuery
: urlQuery = {"firstname" : "Marie" , "id" : "2" , "isWoman" : "true"}
Paramètres contenu JSON
Exemple : http://127.0.0.1:8044/myCall/?myparams='[{"firstname" : "Marie", "isWoman" : true, "id" : 3}]'
.
Les paramètres sont passés au format JSON et sont inclus dans une collection.
Dans ce cas, les paramètres sont reçus sous forme de texte JSON dans la propriété urlQuery
et peuvent être analysés à l'aide de JSON Parse
.
//urlQuery.myparams: "[{"firstname": "Marie","isWoman": true,"id": 3}]"
$test:=Value type(JSON Parse($r.urlQuery.myparams))=Is collection) //true
Les caractères spéciaux tels que les guillemets simples ou les retours à la ligne doivent être échappés.
Exemple : http://127.0.0.1:8044/syntax/?mdcode=%60%60%604d
//urlQuery.mdcode = ```4d
$test:=Length($r.urlQuery.mdcode) //5
Les paramètres fournis dans le body de la requête à l'aide des verbes POST ou PUT sont traités par des fonctions dédiées : getText()
, getPicture()
, getBlob()
, getJSON()
.
.verb
verb : Text
Description
La propriété .verb
contient le verbe utilisé par la requête.
Les verbes de requête HTTP et HTTPS incluent par exemple "get", "post", "put", etc.
La propriété .verb
est en lecture seule.