Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

JSON から OpenAPI(Swagger) Spec のモデルを生成するのに「Swagger toolbox」が便利

OpenAPI(Swagger)Spec を書いていて、真っ先に面倒かつ苦痛なのが Model 部分の定義だと思います。

予め OpenAPI Spec を生成するように Web API側を定義していたりすれば、話は別ですが API Design First で構成していく場合、大量の定義をYAMLで書いていかないといけません。 また、すでに存在しているWeb APIからOpen API Specを書き起こす、みたいなプロジェクトの場合も同様ですね。

そんな苦痛な Model 生成が「Swagger toolbox」というWebアプリで一層(半分くらい)できるのでオススメです。

swagger-toolbox.firebaseapp.com

f:id:sugimomoto:20200118192849p:plain

使い方は簡単です。左側に Model を生成したいJSONを貼り付けて「Convert」をクリックするだけ。

もし、Example を含めたい場合は「Include the example to the output」にチェックを入れればOK。

素晴らしい。

OpenAPI(Swagger) Spec のバージョンを 3.0 から 2.0 に変換したい:API MATIC を試してみた

2.0 から 3.0 に上げたいならまだしも、3.0 から 2.0 に下げたい? 何をバカなことを言っているのだ? と思われるかもしれないんですがちゃんとした理由がありまして

PowerApps のカスタムコネクタが OpenAPI Spec から生成できるんですが、現在 2.0 しかサポートしていないんですね。

docs.microsoft.com

でも、私が個人的に作っていた API が OpenAPI Spec 3.0 なのですね。(わかってたのにー (ノシ 'ω')ノシ バンバン)

なので、変換できるツール無いかなーと探していたら、ありました!

API MATIC

API MATIC」という API定義から各言語のSDKを生成するサービスがあるんですが

www.apimatic.io

f:id:sugimomoto:20200118194014p:plain

その機能の中に「API Transformer」というものがありまして、OpenAPI以外にも、各種API Specを相互変換!

www.apimatic.io

f:id:sugimomoto:20200118194455p:plain

しかも、Postman Collection までサポート・・・!!!!!

素晴らしい!!!

なお、基本的には Web API を提供している側向けのサービスなので、お値段は月々 $9.9 ~。

f:id:sugimomoto:20200118194642p:plain

今回はとりあえず Trial で試してみました。

使い方

使い方は簡単です。サインアップしたら、ダッシュボードの画面右上に「Transform API」というボタンがあるので、これをクリック。

f:id:sugimomoto:20200118194832p:plain

あとは対象となる YAML を選んで、Export Format から OpenAPI/Swagger v2.0 を選べばOK!

f:id:sugimomoto:20200118195031p:plain

ValidationがOKだったら、Proceed をクリックすると、OpenAPI/Swagger v2.0 の Spec がダウンロードされてきます。

f:id:sugimomoto:20200118195132p:plain

やったね!

f:id:sugimomoto:20200118195307p:plain

Postman Documentation / API Network が便利だよ!

この記事は「Postman Documentation / API Network が便利だよ! 」ということを言いたいだけの記事です。

Postman Documentation / API Network とは?

Postman には Webベースのドキュメントを公開する機能があります。

learning.getpostman.com

作成すると以下のような見やすい API リファレンス と APIテスティング が行えるWebSiteが自動的に作成されます。

もちろん、Postmanコレクションも取得して、ローカルのPostmanで実行することも可能です。

docs.api.getpostman.com

f:id:sugimomoto:20200114111813p:plain

ちなみに、私の観測範囲で、このPostman Documentation を使ってAPI ドキュメントを公開している日本のクラウドサービスは「Bカート」さんくらい。

https://docs.api.bcart.jp/

f:id:sugimomoto:20200114111943p:plain

ちなみに、Postman では生成したドキュメントをPostmanの サイト上で公開・共有できる仕組みを提供しています。

それが Postman API Network です。

f:id:sugimomoto:20200114112624p:plain

現在、470種類ほどのAPIが公開されており、APIドキュメントの参照、Postman Collectionの入手が可能になっています。

f:id:sugimomoto:20200114112749p:plain

APIを検証する時、Postmanコレクションを毎回手作業でがつがつ作るんですが、予めこういうサイトで公開されていると、すごく楽で助かります。

最後に

パブリックなAPIは、みんな Postman API Network で API documentを公開してくれればいいのに!!!

Postman Collectionは OpenAPI SpecやRAMLからも取り込めるので、敷居は低いと思うんですが。

PowerApps / PowerAutomate カスタムコネクタを Postman コレクションから作成する

前回の記事では OpenAPI(Swagger)Specからカスタムコネクタを作る方法を解説しました。

kageura.hatenadiary.jp

今回は Postman コレクションからカスタムコネクタを作成する方法を見ていきます。

docs.microsoft.com

  • Postman とは?
  • 対象のAPI
  • 出来上がるもの
    • Postman コレクションサンプル
    • Postman コレクションのエクスポート
    • カスタムコネクタの作成
    • アプリの作成
  • おわりに
  • Tips
    • 応答に利用できるレスポンスを予め加えておく
    • 動的URLを構成したい場合どうするの?
続きを読む

OpenAPI(Swagger)Spec から Postman Collection を生成すると楽にAPIテストができる

Postman で API を実行するのは結構手軽にできるんですが、エンドポイントが多かったり、URLパラメータやヘッダーを逐次、ドキュメントから持ってくるのは結構面倒です。

もし、そのAPIがOpenAPI(Swagger) Specを公開していたら、それを取り込むと簡単にPostmanコレクションを生成できます。

OpenAPI Spec って何?

ここを参照しましょう。

OpenAPI Specification(OAS)は、ソースコードへのアクセス、追加ドキュメント、またはネットワークトラフィックの検査を必要とせずに、人間とコンピュータの両方がサービスの機能を発見して理解することを可能にする、  プログラミング言語に依存しないREST APIの標準的なインターフェイス記述を定義します。

引用元:https://github.com/OAI/OpenAPI-Specification

対象のAPI

今回対象にするAPIは私が以前作成して、パブリックに公開している O'Reilly Book List API です。作り方はこちら を参照してください。

f:id:sugimomoto:20200114111206p:plain

以下のURLからOpenAPI Specをダウンロードできます。

http://decodeapiserverdemo.azurewebsites.net/api.rsc/$oas

取り込み方

取り込み方は簡単です。Postmanを立ち上げて、「Import」ボタンをクリックし

f:id:sugimomoto:20200114111211p:plain

事前にダウンロードしておいた、OpenAPI(Swagger)Specのファイルをドラッグ・アンド・ドロップするだけです。

f:id:sugimomoto:20200114111215p:plain

あとはTeamで共有するかどうかと、コレクションを作成するかどうかを決めて、Nextをクリックすれば完了です。

f:id:sugimomoto:20200114111221p:plain

以下のようにコレクションが生成されて、

f:id:sugimomoto:20200114111226p:plain

手軽にAPIを試せる状態が整います。

f:id:sugimomoto:20200114111233p:plain

Reference

learning.getpostman.com

PowerApps / PowerAutomate カスタムコネクタを OpenAPI(Swagger)Specから作成する

最近、少し PowerApps / PowerAutomate のカスタムコネクタ周りについてまとめていました。

現在何種類かの作り方があるんですが、それぞれの特徴を捉えるために、何回かに分けて記事にして行こうと思います。

  • PowerApps / PowerAutomate カスタムコネクタって何?
  • 現在カスタムコネクタがサポートしている作り方
  • OpenAPI(Swagger)って何?
  • OpenAPI(Swagger)で公開されているサービス
  • 対象のAPI
  • 出来上がるもの
    • OpenAPI(Swagger)Specのダウンロード
    • カスタムコネクタの作成
    • カスタムコネクタを使ってみる
  • おわりに
続きを読む

自分のはてなブログの投稿状況データをPowerBIで可視化する:CData XML ODBC Driver

先日公開した以下の記事で書いたのですが、自分のはてなBlogでどんな投稿をしているかPowerBIで可視化してみました。

kageura.hatenadiary.jp

最終的にできあがったのは以下のようなレポートです。

f:id:sugimomoto:20200105231417p:plain

この記事ではこのようなレポートを作成するためのデータ取得方法について解説していきます。

その前にちょっとAPIの解説

はてなBlogにはいくつか外部からはてなBlogにアクセスするためのAPIが提供されています。

最初2つのAtomRSSはおそらく使ったことがある方も多いと思いますが、Blogの更新状況を取得するためのAPIプロトコルです。

AtomPubはAtomのように外部からBlog記事を参照できる機能はもちろんですが、記事の登録や更新にも対応しているのがポイントとなるAPIです。

最後のoEmbed APIこちらの解説記事がわかりやすいかと思いますが、名前の通り外部コンテンツへの埋め込みおよびその記事の参照用に特化したプロトコルです。

今回APIとして必要な要件は、過去の全記事に関する情報が参照でき、かつカテゴリ情報も取得する必要がありました。

そして、実はその要件を満たしたAPIは「AtomPub」一択です。

前2つのAtomRSSは参照用としては優れているのですが、最新の記事参照のみに特化しているため、ページネーション、つまり過去記事の参照ができません。

oEmdedは参照するためにどの記事を参照したいか、といったURLが必要となるため、言わずもがな。

AtomPubはページネーションをサポートし、カテゴリも取得できるので、今回のようなユースケースにはうってつけのAPIとなっていました。

実装方法

それでは実際に実現する方法なのですが、この記事でははてなBlogデータをAtomPub経由で取得するためのコネクタを使うので、特にプログラミングの要素は出てきません。

なので必要なものは、以下の「CData XML ODBC Driver」と

XML ODBC Driver - ODBC | ODBC Drivers | ODBC Connection | ODBC API

XML ODBC Driverを通じてはてなBlog AtomPubに接続できるようにするための設定ファイルだけです。

github.com

あとは分析用に Microsoft Power BIを使いました。Tableauなどでも同じ用に実施できると思います。

powerbi.microsoft.com

API Keyと接続URLの取得方法

それでは実際にデータの取得を行っていきたいと思いますが、AtomPub APIは接続するために「接続用URL」と「API Key」が必要となります。

はてなBlogの管理画面から「設定」→「詳細設定」に移動

f:id:sugimomoto:20200105231432p:plain

AtomPubにルートエンドポイントとAPIキーの情報があるので、これを利用します。

f:id:sugimomoto:20200105231444p:plain

設定ファイルをダウンロード

次に接続用の設定ファイルをダウンロードします。通常設定ファイルは「CData XML Driver」用で都度カスタマイズする必要があるのですが、今回は私が作成してしまっているので、以下のURLからダウンロードして利用できます。

github.com

上記URLから「HatenaBlogFeeds.rsd」というファイルをダウンロードし、任意のフォルダに配置(例:C:\CData_REST\Hatena)します。

f:id:sugimomoto:20200105231451p:plain

CData XML ODBC Driverのインストールとセットアップ

続いて「CData XML ODBC Driver」をインストールします。有償の製品ですが、30日間のトライアルバージョンがあるので、今回はそれを利用します。

以下のURLから評価版をダウンロードし

http://www.cdata.com/jp/drivers/xml/odbc/

f:id:sugimomoto:20200105231457p:plain

ダウンロードしたexeファイルを実行して、セットアップを行います。

f:id:sugimomoto:20200105231507p:plain

セットアップ完了後、DSN構成画面が表示されるので、以下のように必要な情報を入力します。

f:id:sugimomoto:20200105231513p:plain

以上で下準備は完了です。

PowerBI からはてなBlog AtomPub APIに接続

それではPowerBIに はてなBlogのデータをロードしてみましょう。

PowerBIを立ち上げて、「データを取得」をクリックし

f:id:sugimomoto:20200105231520p:plain

ODBC」接続を選択します。

f:id:sugimomoto:20200105231527p:plain

先程設定したDSN名を選択して「OK」をクリックすると

f:id:sugimomoto:20200105231533p:plain

以下のようにはてなBlogのデータがフラット化されて取得できるテーブルが選択できるようになっています。これを読み込みます。

f:id:sugimomoto:20200105231538p:plain

以下のような感じでデータが取得されました。設定ファイルが自動的にAtomPubのページネーションもするようになっているので、過去の全記事を取得してくるようになっています。

f:id:sugimomoto:20200105231544p:plain

あとはこのデータを使って、PowerBIの機能でビジュアライズするだけです。

f:id:sugimomoto:20200105231555p:plain

その他:カテゴリの取り方

ちなみに、デフォルト状態のカテゴリ情報は以下のようにカンマ区切りになっているのですが、

f:id:sugimomoto:20200105231603p:plain

これだとリレーショナルなデータになっていないので、うまく可視化できない部分が出てきますよね?

これを以下のようにBlogIDとリレーションされた形式にする方法もあります。

f:id:sugimomoto:20200105231612p:plain

方法は簡単で、まず元になっているクエリを複製し、適当に「Category」といった名前に変更、IdとCategoryTerm以外の列を削除します。

f:id:sugimomoto:20200105231619p:plain

次に「列の分割」から「区切り記号による分割」を選択し

f:id:sugimomoto:20200105231626p:plain

「コンマ」の区切りごとで列を分割します。

f:id:sugimomoto:20200105231631p:plain

以下のようなデータができあがるので、この項目を選択して、「列のピボット解除」を実行します。

f:id:sugimomoto:20200105231636p:plain

すると以下のようにIDに各カテゴリがリレーションされた形のデータができあがります。「属性」列は最終的に消してしまっても大丈夫です。

f:id:sugimomoto:20200105231651p:plain

f:id:sugimomoto:20200105231658p:plain