フローでHTTPコールアウトを試した



Spring '23 の新機能でノーコードでHTTPコールアウト（現状ベータバージョンでGETのみ）が出来るようになりました。
多少クセはあるものの、多方面の連携を気軽にできるようになります。
色々試してみたので参考になれば幸いです。
# フローでHTTPコールアウトする手順

大まかな流れは以下の通りです。
１．外部ログイン情報の設定
２．HTTPコールアウト用の権限セットを作成し、実行するユーザに割り当て
３．指定ログイン情報の設定
（必要に応じてカスタムヘッダーも作成する（認証用のAPIトークンなど））
４．フローでHTTPコールアウトを作成する

今回APIとして使用するのはOpenStreetMapで使用されているNominatimをベースに解説していきます。

https://wiki.openstreetmap.org/wiki/JA:Nominatim

## １．外部ログイン情報の設定


まずは外部ログイン情報を設定します。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/bd376d38-e1f3-4adf-1107-13981b3b1d55.png)

## ２．HTTPコールアウト用の権限セットを作成し、実行するユーザに割り当て

権限セットを作成します。作成のみで、別途付与する権限はないです。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/82d554ee-d2af-5ade-3cc7-1fb82d12a3d5.png)

続けてHTTPコールアウトを実行するユーザに割り当てます
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/b85a2129-7568-f838-8956-70e18ec5f6d6.png)

## ３．指定ログイン情報の設定
URLはAPIドキュメントを参照して入力していきます。
この例ではジオコーディングを前提として/searchまでURLを入力していますが
汎用的にするのであれば最低限の.orgまでのURLで良かったと思います
（フローの設定で指定ログイン情報のURLをベースに続きのURLを設定できます）

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/c391e3eb-c76d-74cf-2b67-bbcd63587220.png)

続いて作成した指定ログイン情報に権限セットを付与します
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/1eaf3f14-9fa2-3229-9a39-5c318f75f31f.png)

ここでヘッダーに認証用のAPIを設定する必要があれば設定します。
今回の例では認証用のAPIをヘッダーに付与する必要がありませんのでそのままで大丈夫です。

別のAPIで例えばgBizINFO REST APIでは認証用のAPIトークンが必要なので次のような形で設定します
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/7141e64d-5a35-7cec-fa51-c2cab84aed8f.png)

https://info.gbiz.go.jp/hojin/swagger-ui.html#!/gBizINFO_REST_API/searchInfoUsingGET

## ４．フローでHTTPコールアウトを作成する
名前を入力し、先ほど作成した指定ログイン情報を選択します

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/ce513ae0-f392-1766-66d6-b89f80a9ad51.png)

続いて表示ラベル、メソッドを選択しAPIドキュメントを参考にURLパスやクエリパラメータキーを入力していきます。サンプルとして必要最低限のクエリパラメータ―キーを設定します。データ型は文字列以外にも整数、倍精度浮動小数点数を選択できます。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/935024b4-ade8-ef49-2a15-e1e894951c99.png)

別の例では郵便番号検索ができるAPI（ポストくん）を使用した場合は以下のようになります。
URLパスに変数を追加した場合はクエリパラメータで設定したようにデータ型を同様に選択する必要があります。

![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/5b92e419-a001-6ec1-426a-4ed77e627bc0.png)

ポストくんの場合、API仕様書によると`/{new}.json` とすべきところですが、ここではその設定をすることができません（エラーとなります）。のちほど、別に割り当てを行い、仕様書に準拠したものに修正していきます。

https://postcode.teraren.com/doc/redoc


続けて想定されるレスポンスボディを指定します。
curlやポストマンなどでサンプルAPIのJSON応答をコピーして確認を押下し、完了します。
注意点として応答にnullがあるとエラーで確認できませんので、適切な値を入れます。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/6f6db17d-4d84-8ec8-1508-7295a20c8d14.png)

これでアクションが作成できるようになりました。
続けてそのアクションの設定を行い、入力値はAPI使用に準拠していきます。
例のように直接入力することも変数を設定することも可能です。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/4c639727-7b54-739f-900e-e2a3454d2e97.png)

# 作成したNominatimコールアウトの例

例として画面フローを作成し、ユーザに任意の住所を入力してもらい
その情報に応じて画面に出すシンプルなフローを作成しました。

![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/551a0509-3d85-391d-0691-c29440dd2f99.png)

ジオコーディング結果の画面は以下のように設定します。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/cbe089c8-be95-0be1-943d-b06adcbaeafb.png)

実行結果が以下のようになります。

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/9ce31b90-7d55-c56a-1f64-f51efadc4b5f.png)

API仕様で大括弧([])が含まれている場合、それ以降の個別の値にアクセスできません。
特に一番外側に大括弧が含まれるAPI仕様の場合は応答すべてが返ってくるので取得した情報を加工する必要性があり、労力がかなりかかると思います（場合によっては加工するためにApexアクションを作成したほうが良いかもしれません）。

# 作成した郵便番号検索APIの例

同じ要領で郵便番号検索APIを作成しました。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/92b03d46-eca9-433f-2c08-bcd48c50ac15.png)

json付加ではAPI仕様の `/{new}.json` に合わせるために割り当てていきます。
画面で郵便番号をテキスト`{!postalcode}`に入力後、変数に`{!postalcode}`と.jsonを追加することでAPI仕様に準拠したURLに整えていきます。

![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/b49064b1-32e6-caca-3cdc-4da8c29b72ab.png)

![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/6d30e517-1258-44de-a07a-574b6e287470.png)

ポストくんの郵便番号から住所を返すAPI仕様の場合、大括弧が含まれていないため、郵便番号検索結果の画面で直接値にアクセスすることが可能です。

![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/18e4d4f0-5d93-5143-8d00-edf8497e56be.png)

この画面フローを実行した結果は次の通りとなります。
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/340ae6e5-0f87-a6b7-310e-403685523443.png)

# ノーコードでHTTPコールアウトを試した感想
良いなと思う部分はコードでこれをやろうとする場合に比べて圧倒的に楽だなと感じました。
外部との連携が手軽にできるようになる印象です。ユーザの発想次第で出来ることの幅が広がる印象を受けました。

もうちょっとよくなってほしいなと思う部分はHTTPコールアウトのフローのパラメータやサンプルレスポンスの設定を一部間違えてしまっても修正できないところです。一つ間違えたり、修正を加えようとしても一からHTTPコールアウトを作成しなければいけません。

あとAPI仕様で大括弧であっても個別にアクセスできるようになったり、複数のレスポンス形式に対応できればさらに利便性は向上すると思います。