論よりコード (TL;DR)
Azure Logic Apps の Request トリガーで受け取った HTTP ヘッダは triggerOutputs()['headers'][HTTP_HEADER_KEY]
で読み出せる。
例) User-Agent
という HTTP ヘッダを読み出したければ
@{triggerOutputs()?['headers']?['User-Agent']}
と、アクションのフィールドに設定すればよい。
注) 書式としては triggerOutpus()
だが、アクションのフィールドに指定する時は "式" として認識させるため @{ ... }
で囲む。
解説
triggerOutputs()
関数は、トリガーで受け取ったアウトプットを構造として出力するため、[KEY]
でオブジェクトを指定すれば値が読み出せる。
triggerOutputs() の確認方法
Logic Apps の [概要] > [実行の履歴] で "HTTP 要求の受信時" を開いた後、 "出力" の [未加工出力の表示] が triggerOutputs() で見ることができる構造となる。
curl -H "Content-Type: application/json" -H "X-Custom-1: cust-data1" -d '{"data": 3}' $URL
ここまで見なくとも、基本的な構造は 受信要求からコンテンツを参照する にも書かれているように headers
と body
をトップとした構造となっている。
キー参照に ?
を挟むことで、存在しないキーへの参照の InvalidTemplate を回避できる
User-Agent
を読み出す場合は
triggerOutputs()['headers']['User-Agent']
で良いのだが、この時 User-Agent
が存在しない場合は InvalidTemplate が発生する。
キーが存在しない場合の InvalidTemplate を無視したいときに利用できるのが ?
である。
キーが存在しない可能性がある参照の先頭に ?
を入れるだけ。
triggerOutputs()['headers']?['User-Agent']
もちろん階層で指定も可能なため、
triggerOutputs()?['headers']?['User-Agent']
と triggerOutputs()
で headers
が無い場合、そしてその下の参照で user-agent
がない場合、と表現可能。
キー名の大文字・小文字は無視される
triggerOutputs()['headers']['User-Agent']
となっていたら user-agent
USER-AGENT
どれでもマッチする。
最後に: Azure Logic Apps とは?
Azure Logic Apps(以下、Logic Apps) は、最近流行話題となっているノーコード・ローコードを実現するサービスです。
※ ノーコード・ローコード自体についてはノーコード・ローコードのあれこれの解説がわかりやすいかもです。
Logic Apps はトリガーによってワークフロー(アクションをつなげたロジック)を実行する仕組みとなっており、似ているものとしては Node-RED があります。
Request トリガー
トリガーは色々用意されてますが、中でもわかりやすいのは Request トリガーです。これを設定すると URL が発行され、その URL に HTTP リクエストすることでワークフローが起動できる、いわゆる Webhook1 です。
なんでこんなエントリーを?
SORACOM Beam では SIM に紐づいている番号 "IMSI" を X-SORACOM-IMSI として HTTP ヘッダに付けながらデータ転送できます。それが読めたら嬉しいよね!っていう理由です。
SORACOM Beam ではこんな HTTP ヘッダを付けることができます。詳しくは SORACOM Beam の開発者向けマニュアルをご覧ください。
header | 意味 |
---|---|
X-SORACOM-IMSI | SIM の IMSI |
X-SORACOM-IMEI | 通信したモデムの IMEI |
X-SORACOM-OPERATOR-ID | SORACOM のアカウント(オペレーター) ID |
X-SORACOM-TIMESTAMP | SORACOM でデータを受け取ったタイムスタンプ(エポックミリ秒) |
X-SORACOM-SIGNATURE | SHA256 署名 |
X-SORACOM-GEO-POSITION | 簡易位置測位機能による緯度経度 |
あとがき
ノーコード!ローコード!
EoT
-
HTTPWebhook トリガー とは異なり、よりシンプルに実現できます。 ↩