こんにちは。CData Software Japanリードエンジニアの杉本です。
今回は気になるローコードなAPI連携サービス「Paragon」を見つけたので、紹介したいと思います。
Paragon とは?
Paragon はビジュアルワークフローエディターを使用して簡単にAPI統合、DB連携などを構成することができるローコードアプリケーション統合プラットフォームです。いわゆるiPaaSですね。
最近、約2.6億円調達のプレスリリースが出て、結構ツイッターなどでは反響があったように感じます。
主な特徴としては、ZapierやPower Automateのようなビジュアルワークフロー・iPaaSですが、どちらかといえば完全にコードを廃するよりも、中継処理部分はJavaScriptで柔軟な処理を書かせるという感じが強い製品です。
連携先サービスのラインナップは今の所控えめですが、Web APIをリクエストするためのコネクタは柔軟に構成できるので、大抵のREST APIには接続できるかなと思います。
DB系でMongoDBとMySQL・PostgreSQLをおさえているのが印象的ですね。
あとポイントとしてはAPI Response を構成できるところですね。いわゆるFaaS(Azure Functionsや AWS Lamdaみたいな)的な構成もできます。
Paragonではfreeプランが提供されていて、とりあえずサクッと試すことが可能です。ただし、Google Sheetsや各種RDBなどの連携は上位プランからとなり、その場合はトライアルが無いみたいなので要注意です。
シナリオ
今回 は Paragon の free プランを使って、Slack通知のAPI連携を実装してみました。
以前私のBlogで紹介している、OReillyのBookリストから最新の書籍リストを取得して、Slackに通知するというものです。
上の記事でも書いていますが、API は CData API Serverを使って構成しています。
https://www.cdata.com/jp/apiserver/
ちなみに、freeプランだと標準提供のSlack コネクタは利用できないので、API用コンポーネントを利用して、実装しています。
サインアップ
まずは Paragonにサインアップしましょう。ParagonのWebサイトの「Get Started」から
以下のユーザー登録を行うだけでサインアップでき、そのまま Free プランが利用できます。
Workflowの作成・スケジューラーの構成
サインアップしたら、新しくWrokflowを作成します。ParagonではWorkflowという単位で処理を記述していきます。
SlackNotficationという名前で作成し
最初にTriggerを決めます。Triggerは現在「Scheduler」と「API Endpoint」が使えます。API Endpointだと、リクエストを受け付けるAPIエンドポイントが提供されるので、外部からそのAPIに対してリクエストを行い実行する形となります。
とりあえず今回はTriggerで、30分ごととしました。
APIからデータを取得するStepを作成
続いて実際の処理部分を作っていきます。まずOReillyのBook List APIからデータを取得したいのでAPI RequestのStepを追加します。
今回は最新の書籍を5件取得します。上位5件で発売日降順で並び替えるので、実際のAPIリクエストは以下のようにしました。
GET https://oreillydemoapi.azurewebsites.net/api.rsc/OReillyBooks/?$top=5&$orderby=PublishDate desc
Paragonでは、Paramsの部分でクエリパラメータを記述できます。
また、認証用のトークンはHeaderで渡します。以下のパラメータを追加しました。
x-cdata-authtoken: 7y3E6q4b6V1v9f0D2m9j
それぞれのStepで実際にAPIが正常に実行されるかどうかを「Test Step」をクリックすることで確認できます。以下のようにレスポンスが返ってきていることを確認できました。
レスポンスは以下のようになります。これを後続のStepで使っていきます。
{ "@odata.context": "https://oreillydemoapi.azurewebsites.net/api.rsc/$metadata#OReillyBooks", "value": [ { "RowId": 439, "ImageUrl": "https://www.oreilly.co.jp/books/images/picture_large978-4-87311-888-8.jpeg", "ISBN": "978-4-87311-888-8", "Price": "3520", "PublishDate": "43766", "Title": "ゼロトラストネットワーク", "URL": "https://www.oreilly.co.jp/books/9784873118888/" }, { "RowId": 440, "ImageUrl": "https://www.oreilly.co.jp/books/images/picture_large978-4-87311-889-5.jpeg", "ISBN": "978-4-87311-889-5", "Price": "4180", "PublishDate": "43757", "Title": "Juliaプログラミングクックブック", "URL": "https://www.oreilly.co.jp/books/9784873118895/" }, { "RowId": 438, "ImageUrl": "https://www.oreilly.co.jp/books/images/picture_large978-4-87311-887-1.jpeg", "ISBN": "978-4-87311-887-1", "Price": "3080", "PublishDate": "43735", "Title": "NumPyによるデータ分析入門", "URL": "https://www.oreilly.co.jp/books/9784873118871/" }, { "RowId": 437, "ImageUrl": "https://www.oreilly.co.jp/books/images/picture_large978-4-87311-886-4.jpeg", "ISBN": "978-4-87311-886-4", "Price": "3190", "PublishDate": "43727", "Title": "レガシーコードからの脱却", "URL": "https://www.oreilly.co.jp/books/9784873118864/" }, { "RowId": 419, "ImageUrl": "https://www.oreilly.co.jp/books/images/picture_large978-4-87311-865-9.jpeg", "ISBN": "978-4-87311-865-9", "Price": "4620", "PublishDate": "43725", "Title": "Raspberry Piで学ぶコンピュータアーキテクチャ", "URL": "https://www.oreilly.co.jp/books/9784873118659/" } ] }
Slack通知Messageを生成するStepを作成
続いて、API Responseで受け取ったデータをSlackへ通知するための文字列として構成しなおします。
Paragonではこういった処理を一律「Function」というStepでJavaScriptのコードにより構成します。
https://docs.useparagon.com/building-workflows/functions
Functionは前Stepのレスポンスをパラメータとして受け取ることができます。
パラメータは予め定義する必要があるので、以下のようにパラメータのKeyを決めて、前Stepで受け取ったレスポンスをプルダウンから選び、指定します。今回はレスポンスの一個目(response.body.value.0)をパラメータとして渡すようにしました。
あとはJavaScriptで受け取ったレスポンスをSlackに通知するメッセージへ加工します。parametersの変数から予め指定したパラメータにアクセスができます。
function yourFunction(parameters, libraries) { return { "text" : "最近以下の本が追加されました。\nTitle:" + parameters.value.Title + "\nPrice:" + parameters.value.Price + "円\nURL:" + parameters.value.URL + "\nImage:" + parameters.value.ImageUrl } }
最終的な通知メッセージは以下のイメージです。
Slackへの通知リクエストを行うStepを作成
最後にSlackへの通知処理を構成します。
前述の通り、FreeプランではネイティブのSlack通知機能が使えないので、API Requestを使って、構成します。
なので予めSlack AppでIncoming Webhooksを構成し、URLを取得しておきましょう。
次のStepとして「Request」を追加し
PSOTリクエストでSlackの通知URLを指定します。
Bodyには、前のStepで構成したパラメータを以下のように渡すよう、Keyに「text」と指定して、Functionの返り値を紐付けます。
{ "text" : "Message" }
以上ですべてのStepの構成は完了です。
テスト実行
それでは試しに実行してみましょう。
TriggerでSchedulerを指定していますが、「Test Workflow」から手動で実行することも可能です。
おわりに
まだリリースされて間もない製品ということもあり、コネクターの数やUIの挙動など、気になる点もありますが、処理がJavaScriptで書ける点やFaaS的構成が取れる点など、ローコード製品ながらもエンジニアフレンドリーな感じもする面白いサービスでした。