Open ConnectorsでGoogle Driveと接続

## はじめに
この記事では、[Open Connectors](https://help.openconnectors.ext.hana.ondemand.com/home)を使用してGoogle Driveとの接続を行います。最終的なゴールはUIからアップロードした写真やファイルをGoogle Driveに直接することです。

**関連記事**

- [Cloud IntegrationからOpen Connectors経由でGoogle Driveにファイルを格納する](https://qiita.com/tami/items/272bd74c97919293d590)
- [UI5アプリからGoogle Driveにファイルをアップロードする](https://qiita.com/tami/items/d32e1391e2252f847a07)
- [AppGyverからGoogle Driveにファイルをアップロードする](https://qiita.com/tami/items/1525d2764bf0d93c321b)

## Open Connectorsとは
3rd partyのサービスとの連携を行うための仕組みです。様々なサービスとのコネクターが用意されています。これらのサービスと直接連携しようとすると、サービスごとに認証方法や呼び出し方が異なるため、それらを調べて対応しなければなりません。Open Connectorsを使うと、統一した方法で認証、呼び出し、エラーハンドリングなどをすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/bf2f48d5-2a57-b53c-e7c2-d1f3f5c15346.png)

## ステップ
1. 接続設定
1. テスト
1. Postmanからテスト

### 1. 接続設定
[ヘルプ](https://help.openconnectors.ext.hana.ondemand.com/home/googledrive-api-provider-setup)や[ブログ](https://blogs.sap.com/2019/01/01/openconnectors-googledrive-integration-made-simple-with-sap-cpi-sap-cp-ocn/)を見ると、事前にGoogle側でAPI Providerの設定が必要とあります。しかし、今回は個人アカウントだったためか、API Providerの設定がなくても接続できてしまいました。よってここではOpen Connectors側の設定のみ説明します。

ConnectorsからGoogle Driveを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/f20243f3-42eb-bc27-5bee-455c22a8b93f.png)
タイルにカーソルを当て、Authenticateを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/9d9218ea-df38-eeb9-5768-f4f992175b72.png)
名前をつけて"Create Instance"をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/9023f0fb-7af9-6617-cc1a-8d6cbdabb8ef.png)
使用するアカウントを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/e7382dcd-615c-01aa-edc2-df2f7dda78c8.png)
"許可"をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/1ed9e37d-dfb0-8a41-3ce4-36377740b177.png)
以上でインスタンスが作成されます。付与したアクセス権は[Googleアカウント](https://myaccount.google.com/permissions?pli=1)から削除することができます。

### 2. テスト
"Test in the API docs"をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/2f0b6bb7-6bf6-a44d-28a3-a995cd1aaadb.png)

※この画面はインスタンス登録の直後にだけ表示されます。後からテストしたい場合は、Instances > API Docsからテスト画面に行けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/bc5063d6-b329-ea01-75dc-393b1a384629.png)

#### 2.1. ファイルを取得
まずは、ファイルを取得するAPIを実行してみます。GET /filesのリクエストを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/e0ae23df-3cb9-6663-2a63-e76813b78897.png)
Google Drive側にOpenConnectorというフォルダを作成し、ファイルを入れておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/ed3144ee-785b-ba7b-8f2d-8fe138e1c828.png)
ファイルへのパスを指定して"Excecute"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/c911c01e-6bcf-3357-a210-ba9ed855dfac.png)
ファイルが取得できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/c8014b54-7672-1454-75aa-528cd1f2d399.png)

#### 2.2. ファイルをアップロード
次に、Google Driveにファイルをアップロードします。POST /filesのリクエストを実行します。
ファイルパス（フォルダ + ファイル名）と、アップロードするファイルを選択して実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/11b4d9f5-9552-0089-60c0-0d60ca800404.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/f43448ba-4e43-a35e-f34a-7a8bbadc61b9.png)
Google Driveにファイルが格納されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/ad055c9f-6ed0-b6e6-5fef-fcbb9642bfb3.png)

### 3. Postmanからテスト
最後に、PostmanからGoogle Driveにファイルを送信してみます。APIを呼ぶのに必要な情報は、2.のテストを実行した結果に表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/3d84694c-d558-cb8d-3450-29839fc8c112.png)
以下のようにリクエストを設定します。

**URL**
|項目  |設定値  |例  |
|---|---|---|
|URL  |Request URLの?より前の部分  |`https://api.openconnectors.trial.us10.ext.hana.ondemand.com/elements/api-v2/files`  |

**Params**
|項目  |設定値  |例  |
|---|---|---|
|path|格納先のフォルダ名 + ファイル名|/OpenConnector/test.text|
|overwrite|同名のファイルがある場合に上書きするか|true \| false|

**Headers**
|項目  |設定値  |例  |
|---|---|---|
|Authorization|CurlのヘッダのAuthorization|User xxxx, Organization xxxx, Element xxxx|
|Content-Type|multipart/form-data|
|Accept|application/json|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/f7efb23c-37f9-953d-4772-7e34bc6e4ecd.png)
**Body**
|項目 |設定値  |例  |
|---|---|---|
|Key  |file  ||
|value  |ローカルのファイルを指定  |test.txt|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/216f4c6a-04c6-3410-502c-e038c5db30e0.png)
実行すると、以下のレスポンスが返ってきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/7195b6c6-00d4-b889-b83f-db4b9e8bf117.png)
ファイルが格納されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/67b9ecc0-3e69-556b-17c0-96c0d15f5844.png)

## 参考
https://blogs.sap.com/2019/01/01/openconnectors-googledrive-integration-made-simple-with-sap-cpi-sap-cp-ocn/