【HULFT Square】APIで注文書ファイルをアップロードし、データベースまで連携！

## はじめに!
本記事では "ゆる～く" HULFT Squareのご紹介をします。

HULFT Squareについては[こちら](https://www.hulft.com/service/hulft-square)の公式HPへ。
API公開機能（APIマネジメント）については[こちら](https://qiita.com/sugimon/items/3d3e407381298ac18312)のQiitaが分かり易いです。

:::note warn
以下内容はご参考となりますので、実際にご検証、マニュアルのご参照をお願い致します。
:::
:::note warn
また弊社サポートへお問い合わせいただいても
お答えできない場合がございます🙇
是非コメント欄でご意見いただけますと幸いです。
:::

## きっかけ
とあるお客様から・・・
HULFT SquareへAPI経由でファイルを送り、データベースまで連携できる？と
ご質問を頂きました。
HULFT Squareには作成したプロジェクト(処理)をAPIとして
公開する機能（APIマネジメント）があります。
この機能を使い、周辺システムがAPIをコールしたらデータベースまで
連携して欲しいとのこと。
APIマネジメントを活用したいというお声を頂くことが多いので記事にしてみました～

## ざっくりこんなイメージです。
![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/ff7b0a2d-8c50-f8c3-ff80-c328c6404f5b.png)

## こんな感じで作っていく
１．プロジェクト（ETL処理）の作成
　　※上図②,③のイメージ
　　　ファイルデータをHULFT Sqaureのストレージへ書き込み、
　　　データベースへ連携する処理はここで作る。

２．APIプロジェクト（特定のHTTPメソッドが来たらどのプロジェクトを動かすか）の作成
　　※上図①のイメージ
　　　この部分でファイルデータとファイル名を変数（[スクリプト変数](https://www.hulft.com/help/ja-jp/HULFTSquare/Content/Data_Integration/Detailed/script_variables.htm)）に格納。

３．APIクライアント（接続制御設定）の作成
　　※どのユーザのトークンを使用してリクエストが可能か、IPフィルタの設定。

４．APIジョブの設定
　　※手順2,3を指定します。この設定をするとAPIエンドポイントが作られる。

## １．プロジェクトの作成

今回作成したプロジェクトはこちら
![スクリプト全体像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/9eb82ae2-7dcb-91fa-01c7-7e3e976c39d9.png)

この様にスクリプト変数も作成しています。
![プロジェクト名_スクリプト変数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/e3600d64-fa5f-9474-6cfc-c413dee006e5.png)
「ファイル名_string」はAPIに添付しているファイル名を格納し、
「データ_binary」はファイルデータを格納します。格納設定はAPIプロジェクトの作成で。
「現在日時_yyyyMMdd」はファイル名の前に処理実行時の名前を付けるのに使用します。

赤枠内でファイルをストレージに格納
![スクリプト全体像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/92309f72-9a55-ff3c-fabd-d9ff66402ec1.png)

青枠内で赤枠内で出力したストレージのファイルを読み込みデータベースに書き込みます。
![スクリプト全体像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/d5b9643a-951b-d5e7-76ac-f8bfc9969563.png)

データ格納（mapping処理）では以下の様にファイルシステム書き込みに対して値を代入しています。
![スクリプト内_データ格納.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/c5f73001-c82c-3752-a595-fa07cb6ca2f1.png)

上図右側のストレージ格納(ファイルシステム書き込み)へ代入する値はこちらの[公式マニュアル](https://www.hulft.com/help/ja-jp/HULFTSquare/Content/Designer/Connector/filesystem_put_data.htm)をご覧ください。

今回は上記のmapping内で現在日時を取得し、スクリプト変数（現在日時_yyyyMMdd）に格納した値をファイル名に使用しています。

その他のコンポーネント（アイコン）処理は今回は割愛します。
ご質問ありましたら本記事にご質問ください～

## ２．APIプロジェクトの作成
**今回のポイントはここ！**
こんな感じで設定します。
![APIプロジェクト1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/1322152b-1a75-4527-bf56-ab49a48f8378.png)

ファイルをAPIに添付するので
リクエスト本文のコンテンツタイプは「マルチパート/フォームデータ」を指定。
パラメータ名はAPIクライアント側でも使いますので任意の値。
最初のスクリプト変数にはデータ部（今回はファイル）を格納するスクリプト変数を指定。
テキストかファイルを選べますので今回は「ファイル」を選択。
最後のスクリプト変数にはファイル名を格納するスクリプト変数を指定。

レスポンス本文はお好きに！

## ３．APIクライアントの作成
前述の通り接続制御の設定、平たくいうと（？）セキュリティの設定です。
![APIクライアント1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/28188f0a-17ff-a9a6-8585-12872b9c3f0c.png)

:::note info
アクセスキーについて
HULFT Squareではユーザ毎にアクセスキーを発行できます。
ユーザ毎のアクセスキーを使用してAPIリクエストを送信しますので、
APIクライアントではユーザを指定します。
:::

## ４．APIジョブの作成
さてやっとここまできました。
最後に「２．APIプロジェクトの作成」と「３．APIクライアントの作成」で作成した設定をジョブとして指定します。
こんな感じ。
![APIジョブ1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/6d33d607-579f-dae5-f84d-19ac4f6d2409.png)

## さいごに
~~実際にAPIから実行している動画もつけようかと思いましたが力尽きましたので~~

Postmanからコールして動かします。
こんな感じ！！

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="pt" dir="ltr">HSQ API file to DB <a href="https://t.co/ARAtc8WmBj">pic.twitter.com/ARAtc8WmBj</a></p>&mdash; さんまの塩焼き (@sanmashioy4ki) <a href="https://twitter.com/sanmashioy4ki/status/1778635361369157670?ref_src=twsrc%5Etfw">April 12, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



以上！