SAP HANA Cloud DBをOData化してAPI Managementに登録する

# 本記事でやりたいこと
Step1.SAP BTP上に作成したDBをOData化して外部から連携できるようにする
Step2.公開したODataをAPIManagementに登録してAPIとして管理する

開発はBTP上で実施するのでバージョンなどは省略

# Step1.SAP BTP上に作成したDBをOData化して外部から連携できるようにする

https://developers.sap.com/group.hana-cloud-cap-setup.html

このチュートリアルに沿ってアプリ開発を勧めてください
この記事でやりたいことのためには画面の作成は不要です

# Step2.公開したODataをAPIManagementに登録してAPIとして管理する

https://developers.sap.com/tutorials/cp-starter-isuite-api-management.html

上記はCloud IntegrationのiFlowを登録する手順ですが同様の手順でAPI Managementに登録します
※S/4HANAと同様の方法でODataを登録する事ができない

https://developers.sap.com/tutorials/hcp-apim-create-provider.html

# Step3.ODataをカスタマイズする

https://developers.sap.com/tutorials/cp-starter-isuite-api-management.html

こちらのチュートリアルStep2-9のようにAPI仕様を手書きで書くのはしんどいと思います（私はしんどい）
APIの利用自体はできるけど仕様がわからないのは不便
プロジェクトによってはこういうのをAPI仕様書として利用する場合もあると思うので追加していきます

BTPのBusiness Application Studioに戻ります（VSCとかで開発してる人はそちらへ）

Terminalから以下のコマンドを実行

```bash
npm add --save-dev cds-swagger-ui-express
```

以下のserver.jsファイルを作成

```server.js
const cds = require ('@sap/cds')
module.exports = cds.server

if (process.env.NODE_ENV !== 'production') {
  const cds_swagger = require ('cds-swagger-ui-express')
  cds.on ('bootstrap', app => app.use (cds_swagger()) )
}
```

ローカル実行して動作確認してください

```bash
cds build
npm start
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/b41aa02f-51b8-83ad-ccc2-a5a6418bfd0f.png)
metadataからOpne API Previewのリンクが増えていると思います
リンク先を確認するとデータモデルなどを視覚的に確認することができます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/012591d1-4f45-7c12-320f-7f6e6c008fb7.png)

Terminalからコマンドを実行するとdocs配下にswaggerの定義ファイルを生成できます
このファイルをローカルにダウンロードしておきます

```bash
cds compile srv --service all -o docs --to openapi
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/9f8307b8-06e4-0bd8-8f65-1723796b34a4.png)


## APIMのカスタマイズ

Step1で作成したAPIを開きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/be068523-da5c-ed5f-0a97-f5a3e8efc8ad.png)

API画面右上からEdit in API Designerを開きます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/712ef03c-c7ee-ec16-8a01-1b42029a7f23.png)
画面上部のボタンからimportを選択し、先程ダウンロードしたファイルをインポートします
インポート前に以下の編集を忘れないでください
一部jsonを抜粋します

```json
{
  "openapi": "3.0.2",
  "info": {
    "title": "Service for namespace CatalogService",
    "description": "This service is located at [/catalog/](/catalog/)",
    "version": ""
  },
  "x-sap-api-type": "ODATAV4",
  "x-odata-version": "4.0",
  "x-sap-shortText": "Service for namespace CatalogService",
  "servers": [
    {
      "url": "/catalog" //ここをデプロイURLまたはAPIManagementのURLに変更
    }
  ],
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137987/94279912-0bfc-0193-81e3-a687c7f9682a.png)
APIManagementからAPI仕様が確認できるようになりました






### 参考URL

cds-swagger-ui-express

https://cap.cloud.sap/docs/advanced/openapi

https://www.npmjs.com/package/cds-swagger-ui-express


Add the Consumption of an External Service to Your CAP Application

https://developers.sap.com/tutorials/btp-app-ext-service-add-consumption.html

SAP Cloud Application Programming Model（CAP）

https://blogs.sap.com/2020/12/31/sap-cloud-application-programming-model%EF%BC%88cap%EF%BC%89%EF%BC%9A%E6%A6%82%E8%A6%81%E3%81%8A%E3%82%88%E3%81%B3%E3%83%87%E3%83%A2-part-1/

https://qiita.com/tami/items/d1b69a93da14e288faf2

https://qiita.com/tami/items/77f8cad68cfd6975c9c0

# Welcome to CAP The Cloud Application Programming Model
https://cap.cloud.sap/docs/