HTTP トリガーとルーティング
JavaScript 関数の HTTP トリガーの動作。入力ソース、パス パラメーター、認証スコープ、ペイロード制限、デプロイ済みトリガーの呼び出しなどがあります。
methodとpathを宣言する JavaScript 関数は、HTTP エンドポイントとして公開されます。これが、 関数をコード化されたアプリのバックエンドとして使用できる理由です。アプリは エンドポイントを呼び出し、関数はブラウザーに到達してはならない資格情報とビジネス ルールを保持します。
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),
});
サポートされているメソッドは次のとおりです。
GETPOSTPUTPATCHDELETE
入力の取得元です
| メソッド | 入力として読み取られたデータの要求 |
|---|---|
GET | クエリ文字列 |
POST、PUT、PATCH、DELETE | JSON 要求本文です。 |
パス パラメーターも結合されるため、 /orders/:id は残りの入力とともに id を指定します。すべてのパス パラメーターは、入力の型で宣言する必要があります。派生スキーマは閉じられているため、宣言されていないスキーマは不明なプロパティとして拒否されます。
パス パラメーターは本文の下で結合されるため、同じ名前の本文フィールドが優先されます。一意の名前を使用すると、サイレント上書きは回避されます。
パス パラメーター
| パターン | 一致する文字列を取得 |
|---|---|
:param | セグメントは 1 つだけです — /users/:id は /users/42 に一致します。 |
:param{regex} | 1 つのセグメント、制約付き — /users/:id{[0-9]+} |
:param? | セグメント、または何もないか — /listと /list/open に一致する/list/:filter? |
* | 末尾のキャッチオール (裸のプレフィックスを含む) |
値は、名前でキー設定される ctx.paramsの文字列としても使用できます。宣言順序に関係なく、より具体的なルートが優先されるため、リテラル /users/me が /users/:idよりも優先されます。ルーティングは、ローカル serve 内でもデプロイ時も同じように動作します。
デプロイ済みトリガーの呼び出し
関数がパブリッシュおよびデプロイされると、その path は Orchestrator HTTP トリガーのスラッグになり、トリガーはルート照合によって受信要求を解決します。呼び出し元はベアラー トークンを送信します。プラットフォームは、呼び出し元の ID を として関数に渡 ctx.user。
デプロイされたトリガーは、パッケージのプレフィックス名で登録されます。パッケージ orders-functions 内の get-order という関数は orders-functions_get-orderとして登録されます。関数を名前で解決するには、そのプレフィックス形式が必要です。
URL を手動で構築するのではなく、コード化されたアプリから UiPath TypeScript SDK の Functions サービスを使用します。
SDK の Functions.invoke()を介して関数が呼び出された場合、パス パラメーターは URL に置換されません — 宣言されたスラグは書き込まれたまま送信され、値はクエリ パラメーターとして、または本文で移動します。ハンドラーは引き続き正しい入力を受け取りますが、 ctx.params リテラル パターンを保持し、正規表現で制約されたパラメーターは一致しません。解決されたパスを作成するには、呼び出し元に URL を構築する必要があります。
認証
呼び出し元は、外部アプリケーションからのベアラー トークンで認証します。そのトークンに必要なスコープは、呼び出し元が実行する場所によって異なります。
デプロイ済みのコード化されたアプリが、外部アプリケーションに登録されているスコープを要求すると、デプロイ時にスコープがアプリに挿入されます。関数の呼び出し元に必要な Orchestrator スコープにアプリを登録します。例:
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が必要です。
同じアプリを ローカルで実行すると、代わりにそのスコープ文字列が uipath.json から取得されます。このスコープでは、 OR.Default (Orchestrator に呼び出し元のフォルダーとテナント ロールの割り当てを適用させるスコープ) を要求することもできます。
openid profile email offline_access OR.Default OR.Execution OR.Folders
openid profile email offline_access OR.Default OR.Execution OR.Folders
OR.Default 外部アプリケーションの登録に追加することはできません。API はそれを不明なスコープとして拒否します。したがって、 uipath.jsonを介してローカルに実行されるアプリでは使用できますが、デプロイ済みのコード化されたアプリでは利用できません。
ペイロードの制限
HTTP トリガーは要求をジョブ引数として渡すため、要求と応答の両方に制限があります。
| 方向 | 上限量 | 制限を超える |
|---|---|---|
| 要求 | 10,000 文字のシリアル化された入力 | 500、 errorCode 4801 、メッセージ JobArguments length should be less than 10000 characters |
| レスポンス | 約 512 KB | 200 本文が空で、エラーがない |
空の応答は設計対象の応答です。ステータスは成功と表示され、損失は何も報告されていません。ペイロードがいずれかの制限を超える可能性がある場合は、代わりに関数をジョブとして呼び出します。ジョブは大きな入力と出力を添付ファイルとして運びます。「 関数を呼び出す」をご覧ください。
データ自体 (ストレージ バケットのパス、または呼び出し元が個別に取得する識別子) ではなく参照を返すことで、制限によって設計が制約されるのを防ぎます。
次のステップ
- 関数コンテキスト — 呼び出し元の ID と要求を読み取ります。
- プラットフォーム サービスへのアクセス — ハンドラーから Orchestrator にアクセスします。
- ルーティング参照 — 完全一致ルールです。