Workato：OpenAPI 2.xで提供されているファイルをOpenAPI 3.x形式へ変換してカスタムコネクタ化する

# はじめに

Workatoには、OpeAPI形式に準拠したJSONまたはYAMLファイルをもとにカスタムコネクタを作成する機能が用意されています。

この機能を利用すると、コードを書くことなくWorkatoのカスタムコネクタを自動で作成することが出来ます。すぐに使える、あるいは少々の調整を加えることで使い始められるため、何より全てのコードを１から書く必要が無いため、標準コネクタあるいはコミュニティライブラリ上でコネクタが提供されていない場面において非常に重宝します。

しかし、この機能の前提として、OpenAPI 3.0(3.x)形式に準拠したJSONまたはYAMLファイルである必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/c0bf38fb-28e6-6fab-99fe-e8b0c4dcf61a.png)

一方、世の中にはまだまだ多くのOpenAPI 2.xで提供されているケースが多く存在します。 一例として、 [「マネーフォワード クラウド経費API」のAPIドキュメント(Swagger)](https://expense.moneyforward.com/api/index.html#/) では、OpenAPI 2.xに準拠したJSONファイルを提供しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/ee1a470d-cb05-c977-43f6-a403f68d1ba4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/d7fad64c-5df6-9586-d304-36271f1bbd8a.png)

このJSONファイルをWorkatoへインポートしようとすると、次の通りエラーになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/ef4d3178-3ee9-d308-1057-47798ca02f4c.png)

これを解決する方法は、OpenAPI 2.x から 3.xへの変換を行うか、APIドキュメントをもとにスクラッチでカスタムコネクタを実装するか、の2択になります。今回は、OpenAPI 2.x から 3.xへ変換を行い、変換後のファイルからカスタムコネクタを作成する方法を紹介します。

# 対応方法

## 【１】OpenAPI 2.0 -> 3.0 へ変換する

### 1. 変換したいOpenAPI 2.0形式のファイルの内容（テキスト）をコピーする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/75762d1e-40ba-0134-9c12-e3eae14858b0.png)

### 2. Swagger Editorを開く

以下のURLへアクセスします。

https://editor.swagger.io/

### 3.  Swagger Editor上へコピーした内容を貼り付ける

※JSONを貼付すると、自動的にYAMLに変換されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/959a8e06-dcba-2dc0-7ab5-625dbb157c57.png)

Swagger Editor上へコピーした内容を貼り付けると、次のような表示（コピー元のAPIドキュメントと概ね同様の表示）になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/c7b0559d-a8cc-5e2c-92de-b864f1058221.png)

なお、貼り付けた内容にエラーが含まれる場合、次の通りエラーメッセージが表示されます。内容を確認し、必要に応じて修正を行います。なお、カスタムコネクタ作成に影響しない（インポートに影響しない）エラーである場合は、ここでは一旦無視して、インポート後にカスタムコネクタ側を修正するのが良いでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/118bee27-f855-7b01-775f-151b5b0df2d3.png)

### 4. OpenAPI 3.0形式に変換する

「Edit」－「Convert to OpenAPI 3」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/b6c84113-fc47-3c58-584f-274e26579229.png)

「Convert」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/c51673e7-e35f-eff1-484e-dbfe68c9ddcf.png)

変換が完了すると、バージョンが 3.x （ここでは 3.0.1）と表示され、OpenAPI 3.xに準拠した内容に変換されたことが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/87fd9be9-f019-f8f3-1614-ecad59ffcb72.png)

### 5. JSON形式で出力（ダウンロード）する

Workatoのカスタムコネクタ作成機能において、YAML形式でのインポートは失敗する場合があるため、JSON形式で出力します。

「File」－「Convert and save as JSON」をクリックすると、JSON形式で出力することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/e596374f-b15b-ecc0-5d27-e9f51e162144.png)

## 【２】Workatoへインポートする

### 1. Connector SDKを開き、「New Connector」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/e11fb473-b151-71c4-8c95-53c45abaf0c8.png)

### 2. 「Import OpenAPI Specification」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/514489a8-0d5b-11ec-efc4-296cb5208fa5.png)

### 3. 【１】で出力したJSONファイルを指定し、「Next」をクリックします。

ダイアログからファイルを選択するか、ドラッグ＆ドロップでJSONファイルを指定します。
その後、「Next」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/b07304f5-19fb-fb18-a2ad-7b184f3d3e56.png)

### 4. インポート結果を確認します。

正常にインポートされると、次の画面が表示されます。
内容を確認し、インポートするアクションを選択のうえ「Go to editor」をクリックします。

※ここで表示される結果はグループ単位でまとめられている（実際のメソッドに対して少ない数で表示される）場合があります。カスタムコネクタのアクションは、グループ展開後の結果で出力されます（実際のメソッドと同数で出力されます）ので、問題ありません。

※インポートするアクションが１つも選択されていないと、次の画面でエラーになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/872c324d-6245-1d4b-37f9-90f8d516a690.png)


### 5. カスタムコネクタの編集画面が表示されます。

適宜テストを実施し、問題なく利用できることを確認します。

「Release this connector」をクリックすると、カスタムコネクタをレシピで利用できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/a2e9abca-a518-13e8-cf99-77f96a537bcb.png)


# 注意事項

- コネクタの生成結果は、インポートされるOpenAPI形式のファイルの品質に依存します。このため、OpenAPI形式のファイルの品質によっては、期待する動作とならない（エラーになる等）場合があります。その際は、インポート結果の調整で対応ください。
- OpenAPI形式のファイルをインポートしてカスタムコネクタを生成する機能は、2023/12/18現在においてはベータ版で提供されています。このため、OpenAPI3.0に準拠しているものであっても、正常にインポートできない、あるいはインポートに失敗する場合があります。（例：Workatoで扱えない文字が含まれている等）