こんにちは、サイオステクノロジーの前田です。
Fuse Onlieを使用すれば簡易にAPI等を作成することが可能です。しかしサンプルがない状態ではどのように作ればいいかわからないでしょう。今回はサンプルAPIを作成して、その内容を解説していきます。
構成概要
今回はFuse OnlineとサンプルのtodoアプリとFuseアプリが存在するようになります。Fuse OnlineとtodoアプリはFuse Online Operatorを利用してデプロイ、FuseアプリはFuse Onlineからデプロイします。下記に簡易構成図を記載します。コンテナに慣れていない方むけに簡易に記載したものです。
簡易構成図
todoアプリは簡単なWEBとDB構成のアプリとなり、WEBブラウザを利用してtodoのタスクを追加削除等の操作することができます。
FuseはtodoのDBに接続してtodoのtaskをAPIで操作確認できるものとなります。
OpenShiftを詳しく知らない人のための簡易補足
- クラスター:複数のノード(サーバみたいなもの)の集合体
- プロジェクト:KubernetesのNamespaceと類似、プロジェクトごとにネットワーク制限やリソース制限、ユーザ制限をかけることが可能
- ルート:クラスター外部からドメインでアクセスする箇所、ロードバランサーをイメージしてください
- サービス:クラスター内部でドメインでアクセスする箇所、外部に公開したくないDB等クラスター内部で連携するときに使用します。ロードバランサーをイメージしてください
- ポッド:コンテナの集合体
前提所条件
- OpenShiftクラスターが構築されていること
- Fuse Onlineがデプロイされていること(過去記事)
Fuse Onlineからサンプルtodoアプリをデプロイ
Fuse OnlineのOperatorを利用してサンプルtodoアプリをデプロイしていきます。
インストール済みのOperator → Fuse Online を選択 → syndesisタブを選択、作成されている appを選択します。
yaml画面にて、todoの箇所をfalseからtrueに変更して保存を押下します。
todoアプリのデプロイが終了するのを待ちます。
ルートの名称がtodoのものを探し、todoアプリケーションのURLにアクセスします。todoアプリケーションの画面が表示されることを確認します。
todoアプリのテスト動作として文字列を入力してAddを押下してtodoのタスクが作成されることを確認します。
こちらでtodoアプリのデプロイは終了になります。
DBコネクションの作成
Fuseを使用して、todoアプリのDBであるpostgresqlを操作するためにFuse OnlineのDBコネクションを作成します。
-
- Connection URL
- Username
- Password
- Schema
Connection URL
jdbcの接続形式で入力します。PostgresqlのDBへの接続形式としてはjdbc:postgresql://host/database の形式になります。こちらの情報のhostとdatabaseの情報は、todoアプリの環境情報から取得していきます。
todoアプリはFuse Onlineと同一プロジェクトにデプロイされます。podの名称はtodo-数字-ランダム文字列の形になっています。ステータスがRunningのものを選択します。
管理コンソールのワークロードー → Pod→ todoアプリのポッド→ 環境と選択します。
下記図の通り情報が表示されます。この情報を入力していくため、別箇所に保管します。
- Databaseの接続コネクション情報を入力します。
- 情報を入力後にValidateを押下します。正しく接続ができている場合は、『Database has been successfully validated』という文章が表示されます。
- Nextを押下します。
- Name にSampleTodoTestと入力して、Saveを押下します。
- コネクションが作成されていることを確認します。
こちらは今回作成するFuseアプリには利用しないコネクションになります。
コネクションはこのように作成し、Fuseアプリがコネクションを利用して連携可能なAPI等になります。
Fuse Onlineからサンプルtodoアプリ用APIデプロイ
今回はサンプルAPIをFuse Onlineにインポートして作成します。Githubにあるサンプルファイルを利用します。下記SampleAPIをzip形式のままダウンロードします。
SampleAPI: https://github.com/syndesisio/syndesis-quickstarts/blob/trunk/api-provider/TaskAPI-export.zip
- 作業の簡易説明としては、下記になります。
- ダウンロードしたzipファイルをインポート
- コネクションの設定修正
- デプロイ
Fuseアプリケーション(API)作成
サンプルAPIをデプロイします。
- Fuse OnlineのIntegrationsを選択してImportを選択します。
- githubからダウンロードしたzipファイルをインポートします。
- Integrationから一覧を確認します。Task APIが追加されています。コネクションの設定ができていないためConfiguration Requiredと表示されます。
- コネクションの修正のため、Connections →PostgresDB→Editの順で選択します。
- 先ほど作成したコネクションSampleTodoTestと同じパスワード情報を入力して、Validateを押下します。
- 『Database has been successfully vakudated』と表示されていたらSaveを選択します。
- Integrationの一覧のTask APIのViewを選択します。
- Editを選択した後Saveを選択、その後 Save and Publishを選択します。
- アプリケーションがデプロイされるまで、しばらく待ちます。
- デプロイされたURLにアクセスしてください。
- Todoアプリのテストで入力した情報が下記のように表示されます。
[{"completed":0,"id":1,"task":"testtodo"}]
こちらは『Get /』のAPIの返却値になります。テスト入力でタスクを複数入力している場合は、複数のデータが表示されます。
サンプルtodoアプリ用API利用
todoアプリ用APIが複数利用可能になりました。どんなAPIがあるか気になることでしょう。OpenAPI記述で書かれているので、OpenAPI情報を取得してSwagger Editorで内容を確認していきましょう。
Integrations → Task API のEdit → View/Edit API Definition → Source の順に選択します。
本記事では3scaleと連携していない状態のためSwaggerEditorを利用します。※CORSの設定のため正常に動作はしません。リクエスト文のサンプル作成とドキュメント確認として利用してください。
SwaggerEditorにOpenAPIの情報を貼り付けます。下記図のように見やすい形になります。
Swagger Editorに下記のようにサーバ情報を追加するとサンプルリクエスト文が使用しやすい形になります。urlの情報は、作成したFuseアプリケーションのurlを張り付けてください。※本作業はしなくても問題ありません。
servers: - url: https://i-task-api-testfuseonline.apps.testocp410.cpawstest.ps.staging-test.sios.jp/
下記の画面のように5つのAPIとサーバ情報が表示されます。
API用途 | HTTPメソッド | パス |
全てのタスクを取得 | GET | / |
新規タスクの追加 | POST | / |
特定のタスクを取得 | GET | /{id} |
タスクの情報更新 | PUT | /{id} |
タスクの削除 | DELETE | /{id} |
APIを使用したタスクの追加
Swagger Editorを利用して新規タスク追加のAPIリクエストを作成していきます。
POSTを選択,Try it out を選択、パラメータが表示されるので、パラメータを入力します。その後Executeを押下します。Responsesの下にCurl文章が出ますので参考にしてリクエストを送信します。
新規タスクの追加リクエストサンプル
curl -X 'POST' \ 'https://i-task-api-testfuseonline.apps.testocp410.cpawstest.ps.staging-test.sios.jp/' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "id": 2, "task": "restapi", "completed": 0 }'
タスクが追加されたことをtodoアプリのurlから確認します。
APIを使用したタスクの削除
Swagger Editorを利用してタスク削除のAPIリクエストを作成していきます。
DELETEを選択,Try it out を選択、パラメータが表示されるので、パラメータを入力します。その後Executeを押下します。Responsesの下にCurl文章が出ますので参考にしてリクエストを送信します。
タスク削除のリクエストサンプル
curl -X 'DELETE' \ 'https://i-task-api-testfuseonline.apps.testocp410.cpawstest.ps.staging-test.sios.jp/1' \ -H 'accept: */*'
一番最初のタスクが削除されることをtodoアプリのURLから確認します。
インテグレーション『GET /{id}』の解説
5つのAPIの1つに注目して、Fuse Onlineにおけるインテグレーション設定について確認していきます。
GET /{id}のインテグレーションを説明していきます。全体としては下記図のようになっており5段階の構造となっています。
1つ目は『Provided API』に必ずある項目でAPIアクセスとして受け付けるという意味になります。
2つ目は『Data Mapper』でAPIのパス『/{id}』からid情報を取得して、その情報をSQLのパラメータ『id』として利用するための紐づけ設定になります。https://fuseURL/22とGETアクセスが来た場合SQLでid=22 を調べる連携ができるようになります。
3つ目は『DataBaseコネクション』でDBからSQLを使用して情報抽出します。ここではtodoアプリのDBのテーブルに対して2つ目で紐づけられたidを指定して情報を抽出するものになります。SELECT * FROM TODO WHERE ID = #id の『#id』がurlのPATH情報になります。https://fuseURL/22の場合は22が#idの値になります。
4つ目は『Data Mapper』で3つ目の結果とhttpレスポンスの紐づけをしています。bodyにSQLの結果を紐づける設定になります。
5つ目は『Provided API』に必ずある項目です。
上記5つの設定を行い、『GET /{id}]』はtodoアプリのDBから特定idの情報をjson形式で返却するAPIとなります。
完成した結果があれば簡単な情報でAPIが構成できるということが理解できます。一から作成するのは難しいと思います。まずはパラメータを変更したりして試してみてください。ほかの4つのAPIも確認と変更してみるとよりFuse Onlineの理解が深まります。
最後に
Webアンケートを取るのに昔はプログラムを書く必要がありましたが、Google等の機能を使えば簡易にアンケートが作れるようになりました。APIも今はエンジニアが作成していることが多いですが、Fuse Onlineが広がれば、エンジニアが作成する以外にも誰でもAPIを作成できるようになると思います。
今回の内容はFuseの公式ドキュメントを参考にしています。TwitterとSalesforceの連携のサンプル等いろいろあるので参考にしていただければと思います。Fuse Onlineは使い方を理解すれば開発の工数削減等に大きく貢献します。しかしFuseは情報が少ないため、悩んでしまう方が多いと思います。本記事が読者の助けの一端になれば幸いです。