Logic Appsにはもろもろ操作できるREST APIが用意されてます。(といってもそんなにないんですけど)
- Logic Appsそのもの
- ワークフローの管理用REST API
- ワークフローのサービス用REST API
- Logic Appsのエンドポイント
Logic Apps そのもの
Logic Appsそのものはいわゆる普通のAzure管理用REST APIということで割愛。
ワークフロー管理用REST API
2つ目のワークフロー管理用のREST APIは平たく言うとポータル上でできる操作がそのままできます。
ワークフローの作成・更新、削除、ワーフクローの取得、移動、リネーム、有効・無効、実行といったところです。
ちなみにバージョン毎のフローも取得できます。(ポータル上ではまだUIがない)※一覧取れないけど。
詳細はドキュメント参照。REST API呼び出し時の認証はAuthorizationヘッダにARMで使う方法と同じようにBearerトークンを取得して渡します。
APIのエンドポイントはこんな感じです。
https://endpoint/subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.Logic/workflows/workflowName?api-version=2015-08-01-preview
API Versionは今回のUpdateのほうを使う場合は 2015-08-01-preview を指定します。(古いほうは 2014-12-02-preview)
実行例) GETで呼び出した場合
※赤枠で囲ったところは次のサービス用REST APIで使うエンドポイントですね
ワークフローのサービス用RESTAPI
ワークフローのサービス用REST APIは基本的にトリガーがマニュアル時の開始に使います。
エンドポイントはこんな感じ。
https://prod-<stamp number>.<region>.logic.azure.com:443/workflows/<workflow guid>/<operation segments>?api-version=2015-08-01-preview&<SAS query parameters>
API Versionは 2015-08-01-preview を指定します。
認証はSASを指定します。URL見てもわかる通り、スタンプ指定やらどこで見たらいいのかわからないWorkflow GUIDとかなかなかハードル高いです。
でも安心しましょう。SAS付きでポータルから簡単にコピーできます。
Logic AppsのブレードのAll TriggersからManualを選択してCallback Urlの値をコピーします。
これでSAS付きURLをゲットできます。後はPutメソッドで呼び出すだけです。簡単ですね!(※バージョン指定する場合などはやっぱり自前でSAS作らないといけない)
これでワークフローが実行されます。正しく実行されればHTTPのレスポンスが202で返ってきます。
ただこれは開始されただけでワークフローが正常に動作したから202のレスポンスになったというわけではないので注意ください。
ちなみにポータルからコピーしたURLにはseが指定されてない(Expireが指定されてない)のでずっと使える感じです。
自前SAS生成の場合はそのあたり自由にできます。用途に応じてご自由に。
Logic Appsのエンドポイント
Logic Appsのブレードの要約もしくは設定→プロパティからエンドポイントを確認できます。
エンドポイントはこんな感じ
https://{region}.logic.azure.com:443/subscriptions/{subscription ID}/resourcegroups/{resource groupname}/providers/Microsoft.Logic/workflows/{logicapps name}
他と違ってAPI Versionは 2015-02-01-preview を指定します。
なお認証はBasic認証です。ユーザー名は default でパスワードはプライマリキーもしくはセカンダリキーでBase64でエンコードした文字列を指定します。
GETで呼び出すと何やらJSONが返ってきます。
{ "properties": { "provisioningState": "Succeeded", "createdTime": "2016-02-25T05:51:44.4959845Z", "changedTime": "2016-02-25T07:55:50.5525908Z", "state": "Enabled", "version": "08587452199349636970", "accessEndpoint": "https://japanwest.logic.azure.com:443/subscriptions/{subscription id}/resourcegroups/{resource group name}/providers/Microsoft.Logic/workflows/samplelogicapp", "sku": { "name": "Standard", "plan": { "id": "/subscriptions/{subscription id}/resourceGroups/{resource group name}/providers/Microsoft.Web/serverFarms/logicappsplan", "type": "Microsoft.Web/ServerFarms", "name": "logicappsplan" } }, "definition": { "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2015-08-01-preview/workflowdefinition.json#", "contentVersion": "1.0.0.0", "parameters": { "$connections": { "defaultValue": {}, "type": "Object" } }, "triggers": { "manual": { "type": "Manual", "inputs": { "schema": { "properties": {}, "required": [], "type": "object" } } } }, "actions": { "Post_Message": { "type": "ApiConnection", "inputs": { "host": { "api": { "runtimeUrl": "https://logic-apis-japanwest.azure-apim.net/apim/slack" }, "connection": { "name": "@parameters('$connections')['slack']['connectionId']" } }, "method": "post", "path": "/chat.postMessage", "queries": { "channel": "#trush", "icon_url": "http://ssssss.blob.core.windows.net/temp/kosmos.png", "text": "?", "username": "logicapp" } }, "conditions": [] } }, "outputs": {} }, "parameters": { "$connections": { "value": { "slack": { "connectionId": "subscriptions/{subscription id}/resourceGroups/{resource group name}/providers/Microsoft.Web/connections/F4668F5E-3125-42B7-B631-3852F7429512", "connectionName": "F4668F5E-3125-42B7-B631-3852F7429512", "id": "subscriptions/{subscription id}/providers/Microsoft.Web/locations/japanwest/managedApis/slack" } } } } }, "id": "/subscriptions/{subscription id}/resourceGroups/{resource group name}/providers/Microsoft.Logic/workflows/samplelogicapp", "name": "samplelogicapp", "type": "Microsoft.Logic/workflows", "location": "japanwest" }
現在のバージョンのワークフローの内容ですね。
まとめ
Logic Apps面白いと思うので活用しましょう。