- Vue d'ensemble (Overview)
- Fonctions JavaScript
- Fonctions Python
- Déployer et exécuter
Déclencheurs et routage HTTP
Comportement des déclencheurs HTTP pour les fonctions JavaScript, couvrant les sources d’entrée, les paramètres de chemin d’accès, les étendues d’authentification, les limites de charge utile et l’appel d’un déclencheur déployé.
Une fonction JavaScript qui déclare un method et un path est exposée en tant que point de terminaison HTTP. C'est ce qui rend une fonction utilisable comme backend d'une application codée: l'application appelle le point de terminaison et la fonction contient les informations d'identification et les règles métier qui ne doivent jamais atteindre le navigateur.
export default defineFunction({
name: "get-order",
method: "GET",
path: "/orders/:id",
input: defineSchema<{ id: string }>(),
handler: async (input, ctx) => fetchOrder(input.id),
});
export default defineFunction({
name: "get-order",
method: "GET",
path: "/orders/:id",
input: defineSchema<{ id: string }>(),
handler: async (input, ctx) => fetchOrder(input.id),
});
Les méthodes prises en charge sont les suivantes:
GETPOSTPUTPATCHDELETE
D’où provient l’entrée
| Method | Données de la demande lues en tant qu'entrées |
|---|---|
GET | La chaîne de requête |
POST, PUT, PATCH, DELETE | Corps de la requête JSON |
Les paramètres de chemin sont également fusionnés, de sorte que /orders/:id fournit id avec le reste de l'entrée. Chaque paramètre de chemin doit être déclaré dans le type d'entrée: le schéma dérivé est fermé, de sorte qu'un schéma non déclaré est rejeté comme propriété inconnue.
Les paramètres du chemin sont fusionnés sous le corps, de façon à ce qu’un champ du corps du même nom l’apporte. Les noms distincts évitent un remplacement silencieux.
Paramètres de chemin d'accès
| Modèle | Correspond à (Matches) |
|---|---|
:param | Exactement un segment — /users/:id correspond à /users/42 |
:param{regex} | Un segment, soumis à des contraintes — /users/:id{[0-9]+} |
:param? | Le segment, ou rien - /list/:filter? correspond à /list et /list/open |
* | Une vue générale, y compris le préfixe barré |
Les valeurs sont également disponibles sous forme de chaînes sur ctx.params, clés par nom. Des routages plus spécifiques l'emportent, quel que soit l'ordre de déclaration, de sorte qu'un /users/me littéral a priorité sur /users/:id. Le routage se comporte de manière identique dans un fichier serve local et lorsqu'il est déployé.
Appel d'un déclencheur déployé
Une fois la fonction publiée et déployée, son path devient le champ de données dynamique d’un déclencheur HTTP Orchestrator, et le déclencheur résout les demandes entrantes par la correspondance de routage. L'appelant envoie un jeton de porteur; la plate-forme transmet l'identité de l'appelant à la fonction en tant que ctx.user.
Un déclencheur déployé est enregistré sous un nom préfixé par le package: une fonction appelée get-order dans le package orders-functions s'enregistre comme orders-functions_get-order. La résolution de la fonction par le nom nécessite ce formulaire préfixé.
À partir d'une application codée, utilisez le service Functions dans le SDK UiPath TypeScript plutôt que de créer l'URL manuellement.
Lorsqu'une fonction est invoquée via le fichier Functions.invoke() du SDK, les paramètres de chemin d'accès ne sont pas remplacés dans l'URL; le champ de données dynamique déclaré est envoyé tel qu'il est écrit et les valeurs se déplacent en tant que paramètres de requête ou dans le corps. Le gestionnaire reçoit toujours la bonne entrée, mais ctx.params contient le modèle littéral, et un paramètre défini par Regex ne correspondra pas. Un chemin résolu nécessite de créer l'URL dans l'appelant.
Authentification
Les appelants s’authentifient avec un jeton de porteur à partir d’une application externe. Les étendues dont le jeton a besoin dépendent de l’endroit où l’appelant s’exécute.
Une application codée déployée demande les étendues enregistrées sur son application externe - la plateforme les injecte dans l'application au moment du déploiement. Enregistrez l'application avec les étendues Orchestrator dont les utilisateurs de la fonction ont besoin, par exemple:
uip admin external-apps create "My App" \
--non-confidential \
--redirect-uri "https://<org>.uipath.host/my-app" \
--user-scope "OR.Execution,OR.Folders"
uip admin external-apps create "My App" \
--non-confidential \
--redirect-uri "https://<org>.uipath.host/my-app" \
--user-scope "OR.Execution,OR.Folders"
OR.Jobs est également requis si l'application démarre des tâches ou lit leurs résultats.
Lorsque vous exécutez la même application localement, sa chaîne d'étendue provient de uipath.json à la place, et vous pouvez également y demander OR.Default — l'étendue qui permet à Orchestrator d'appliquer les affectations de dossier et de rôle de locataire de l'appelant:
openid profile email offline_access OR.Default OR.Execution OR.Folders
openid profile email offline_access OR.Default OR.Execution OR.Folders
OR.Default ne peut pas être ajouté à un enregistrement d’application externe; l'API la rejette comme une étendue inconnue. Il est donc disponible pour une application exécutée localement via uipath.json, mais pas pour une application codée déployée.
Limites de charge utile
Un déclencheur HTTP transmet la requête en tant qu'argument de tâche de sorte que la requête et la réponse sont toutes deux liées.
| Direction | Limite | Au-delà de la limite |
|---|---|---|
| Requête (Request) | 10 000 caractères d'entrée sérialisée | 500, avec errorCode 4801 et le message JobArguments length should be less than 10000 characters |
| Réponse | Environ 512 Ko | 200 avec un corps vide et sans erreur |
La réponse vide est celle sur laquelle concevoir: le statut indique la réussite et rien ne signale la perte. Lorsqu'une charge utile peut dépasser l'une ou l'autre limite, invoquez la fonction en tant que tâche à la place — une tâche transporte des entrées et des sorties volumineuses sous forme de pièces jointes. Voir Invocation de fonctions.
Le fait de renvoyer une référence plutôt que les données elles-mêmes (un chemin de compartiment de stockage ou un identifiant que l'appelant récupère séparément) permet d'éviter que les limites ne contraignent la conception.
Prochaines étapes
- Contexte de la fonction — lire l'identité de l'appelant et la demande.
- Accès aux services de la plate-forme : accédez à Orchestrator à partir du gestionnaire.
- Référence de routage — les règles de correspondance complètes.