Morning Girl

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

スマレジ API のリクエストを簡単に作成するためのAPIテストエクスプローラーを作った

https://github.com/sugimomoto/SmaregiAPP.APIExplorer.Blazor/raw/master/SmaregiAPP.APIExplorer.Blazor/wwwroot/img/smaregi.gif?raw=true

最近ちまちま個人的に作っていた「スマレジ API のリクエストを簡単に作成するためのAPIテストエクスプローラー」を公開してみました!(APIの基本的な使い方はこちらをどうぞ)

以下のURLで公開していますので、スマレジ APIを試してみたいけど、ちょっと敷居が高そう、、、みたいな人は是非試してみてください。(そしてフィードバックをください!)

smaregiapiexplorer.azurewebsites.net

ちなみに、現在はデータ取得部分のみ対応しています。要望が多ければデータ作成・更新部分も対応しようかなと考えています。

使い方は動画や中身を見ればわかるかなーと思いますが、こちらも参照してみてください。公開したばかりで色々とあると思いますが、何かあればIssueまで。

github.com

そもそも、なんでそんなものを作ったの?

スマレジAPI以下の図で示している通りすごく高機能かつクエリの自由度が高いんです! ほとんどのパブリックなAPIってOrderByができなかったり、フィルターが特定の項目だけだったりするんですが、スマレジではほとんどすべての項目に対して柔軟にクエリを行うことができます。

f:id:sugimomoto:20200217233743p:plain

でも、データ取得のリクエスト方法が結構独特のフォーマットで、できることが多い分、若干ツラミがあります。

f:id:sugimomoto:20200217233846p:plain

そこで、そんなデータ取得のリクエストを簡単に作成できるエクスプローラーがあればいいなー、(ついでに今試しているBlazorで作れたら面白そうだなー)と思い、作ってみました。

リクエストを作成した後は、そのままPostmanやプログラムでのリクエストにも貼り付ければ、そのまま利用できます。

f:id:sugimomoto:20200217234313p:plain

もちろん、エクスプローラー上でそのままテストもできます。

技術スタック的な

ASP.NET Core C# Server side Blazor (.NET Core 3.0)ですべて作成しました。

docs.microsoft.com

ホスティング先は Azure Web Apps です。

クライアントロジックがすべてC#で書けるのはやはりいいですね・・・! まだ、触り始めたばかりですが、すごく可能性を感じます。

開発にあたって @jsakamoto さん、@piyo_esq さんには大変ありがたいアドバイスを頂きました。

qiita.com

途中うまくフォームデータを取得しきれない部分があり、JavaScriptで泣く泣く対処していたんですが、最終的には全部ちゃんとC#側にロジックを寄せることができました。大感謝!

その他宣伝的な

あと、私の会社では以下のようなスマレジを便利に使うためのソフトウェアも提供しています。

この時の開発経験がこのエクスプローラーの開発でもかなり役立っています。結構面白いことができるので、トライアル等を是非試してみてください。

CData Smaregi Driver

cdataexcel

スマレジデータをExcel から操作 Product (製品)マスタを一括編集

Tableau Desktop で スマレジ の売上データを可視化

スマレジの商品データと取引データを BigQuery に日次で連携

ノーコードツールでスマレジの会員データを kintone の顧客リストに連携:CData Smaregi Driver & ArcESB

.NET C# クエリビルダー SqlKata で CData ADO.NET Provider for kintone を使ってみる

ちょうど先日、Twitterでこんな疑問を見かけました!(ありがとうございます)

雰囲気行けそうな感じだったので試してみたら、すんなり接続できたので、Blogとしても書き起こしてみました。

SqlKataとは?

オープンソースで提供されている ADO.NET ベースのクエリビルダー兼ORMのライブラリです。

sqlkata.com

通常のSQL Server アクセス

まず、通常通りの使い方で、SQL Serverにアクセスしてみました。なお、.NET Frameworks でやっていますが、.NET Coreでもほとんど変わりません。

Consoleアプリケーションを作成し、Nugetでパッケージをインストール。

Install-Package SqlKata Install-Package SqlKata.Execution

以下のテーブルからデータを取得します。サンプルデータのAdventureworksに含まれているPersonテーブルを対象にしています。

f:id:sugimomoto:20200207105710p:plain

今回は単純にPersonテーブルからの取得を作成してみました。メソッドチェーンで指定できるのがいい感じです。

内部にはDapperが使われているようで、データをGetする際に指定のクラスを渡してあげればIenumerableでレスポンスを受け取れます。いいですねー。

gist.github.com

f:id:sugimomoto:20200207105755p:plain

Select・Where・OrderByといった要素も以下のようにメソッドチェーンで記述できて、大変楽です。

            // Where
            persons = db.Query("Person.Person").Where("BusinessEntityID", "1").Limit(10).Get<Person>();

            // SELECT
            persons = db.Query("Person.Person").Select("BusinessEntityID").Limit(10).Get<Person>();

            // OrderBy
            persons = db.Query("Person.Person").OrderByDesc("BusinessEntityID").Limit(10).Get<Person>();

CData ADO.NET Provider for Kintone を利用する方法

次に「CData ADO.NET Provider for Kintone 」でも試してみたいと思います。事前に以下のページからトライアルをインストールしておきます。

https://www.cdata.com/jp/drivers/kintone/ado/

f:id:sugimomoto:20200207105817p:plain

インストール後、対象のプロジェクトに以下のDLLを参照しておきます。

C:\Program Files\CData\CData ADO.NET Provider for kintone 2019J\lib\System.Data.CData.Kintone.dll

対象となる kintone のアプリは以下のようなテンプレートで作成できる案件情報です。

f:id:sugimomoto:20200207105829p:plain

一点、kintone を扱う上で注意したいのは、取得できる項目名が「日本語」であるという点ですが、なんと素晴らしいことに、ちゃんと日本語名で定義したClassにデータをマッピングすることができるようになっています。

gist.github.com

f:id:sugimomoto:20200207105836p:plain

Insertもこの通り。素晴らしいですね。

            var query = new Query("案件情報").AsInsert(
                new
                {
                    案件名 = "ugauga"
                }
                );

            db.Execute(query);

余談

CData ADO.NET Provider では LINQもサポートしています。このあたりは好みに合わせてライブラリを選ぶことができますし、

cdn.cdata.com

ADO.NET ベースで実装されているラッパーライブラリであれば、だいたいいけると思います。

過去にはDapperでの接続も検証していました。

kageura.hatenadiary.jp

Reference

tekitoumemo.hatenablog.com

ミルクボーイが REST API を説明したら

f:id:sugimomoto:20200131171318p:plain

序章

駒場「最近、うちのおかんがシステム開発に興味を持っててなぁ、名前は忘れたらしいんやけど、色んなクラウドサービスのインターフェースになっていて、アプリケーション間連携にすごく役立てられるものを取り入れてるところがあるらしいんやわ〜。」

内海「そんなもんREST APIに決まってるがなぁ! 今やクラウドサービス連携に必須の要素、インターフェースと言えば、REST API。ロイ・フィールディングが提唱し、WEBやURIの特性・HTTPプロトコルを最大限に活かしたアプリケーションプログラミングインターフェースのスタンダードになっているREST APIに決まってるがなぁ。」

すべての情報(リソース)に適用できる「よく定義された操作」のセット

駒場「最初、オレもそう思たんやけどな、なんでもHTTP Body にInsertとかCreateとか入ってるらしいんやわ。」

内海「ほなぁ、REST APIちゃうかぁ…。REST API は HTTP メソッドで予め定義されているGETやPOSTを利用するのがスタンダードやからなぁ。それはRPCのプロトコルであるSOAPとかちゃうんの? おかん、他にもなんか言うてなかったかぁ。」

リソースを一意に識別する

駒場「そー言えば、URIを意識して作ってるって言うてたわ。」

内海「ほな、REST APIやないのぉ。 REST API ってことは、リソースを一意に識別するためのURIが重要で、users や products とかの名詞で構成するのがスタンダードやからなぁ。やっぱ、REST API やろぉ。」

駒場「オレもそう思たんやけどな、URI にも getUsers とか postPoroduct とか動詞が含まれていて、全部POSTリクエストで実装しているらしいねん。」

内海「ほな、REST API と違うかぁ。リソースは一意になっても、HTTPのメソッドを活用してないからなぁ。やっぱりRPCのプロトコルSOAPとかちゃうんの? 他にもなんか言うてなかったぁ?」

ステートレスなクライアント/サーバープロトコル

駒場「おかんが言うにはな、ステートレスでやっているらしいわ。」

内海「ほな、REST API に決まってるがなぁ。REST APIは、HTTPメッセージの一つ一つが、そのリクエスト(メッセージ)を理解するために必要な全ての情報を含んでメッセージ間におけるセッション状態を記憶しておく必要がないようにしているから、やっぱREST APIやろぉ。」

駒場「オレもそう思たんやけどな、なぜか商品情報登録のために3つのリクエストを順番に実行しないといけないらしいねん。」

内海「ほなぁ、REST APIとはちゃうなぁ。 サーバーとクライアントの通信で状態を管理してしまったら、サービスがスケールしづらくなるし信頼性、結合度の点でもよくないもんなぁ。やっぱりREST API とちゃうがなぁ。」

アプリケーションの情報と状態遷移の両方を扱うことができる「ハイパーメディアの使用」

駒場「おかんが言うにはな、 ハイパーメディア ってゆーのを取り入れているらしいわ。」

内海「そしたら、やっぱりREST APIやろぉ。通常のWebサイトと同じようにハイパーメディアでリソース間の繋がりが構成されていて、クライアントはリソース名をしらなくても辿ることができるようになっているんは常識やもんなぁ。やっぱ、REST APIやろぉ。」

駒場「オレもそう思たんやけどな、Excel 仕様書にリンクを書くってゆーてたわ。」

内海「ほな、絶対にREST APIとちゃうがなぁ! ハイパーメディアといえばハイパーメディアだけど、それはREST APIじゃなくてきっと神EXCELやがなぁ!」

結末

駒場「おとんがゆーにはな、GraphQLちゃうか? ってゆーねん。」

内海「それも絶対ちゃうやろ!Facebookに失礼や! もうええわ!」

ありがとうございましたー

(ご意見、ここが違うんじゃね? などお待ちしています。)

参考文献

ja.wikipedia.org

www.infoq.com

www.ics.uci.edu

Tesla API(Mock)カスタムコネクタを作成する:PowerApps / PowerAutomate

最近あまりにも Tesla API を触りたい衝動が抑えきれず、 Mock の API Serverを作りました。作り方は以下の記事で公開しています。

kageura.hatenadiary.jp

この Mock Server ですが、実装はOpenAPI で作成していますので、PowerApps/ PowerAutomateのコネクタとしても利用できます。

結構色んなコマンドが用意されていて面白いので、実際に試してみました。

  • どんなことができるようになるの?
  • カスタムコネクタの作り方
    • カスタムコネクタの作成
    • カスタムコネクタを使ってみる
  • 実際に Tesla に接続する場合
    • URLの設定
    • AccessTokenを取得する
    • 認証の設定
  • おわりに
続きを読む

Tesla のデータをAPI経由で定期的に Google BigQueryに連携し分析できるようにする:CDataSync

前回の記事で Tesla API の Mock Serverを作ったんですが、作っただけじゃツマラナイので色々と妄想を膨らませて、試してみようと思います。

kageura.hatenadiary.jp

f:id:sugimomoto:20200121114916p:plain

先の記事でも解説しているんですが、Tesla API はおよそ200項目におよぶ大量の車両データ・センサーデータを取得することができます。

バッテリーのチャージ状況から、シートヒーターの稼働、近くの充電サイトまで取得することができます。

なので、このデータを使って、BIツールで分析したいな! というのが最初の狙いでした。

  • 分析を行うために Tesla API の難しいところ
  • こんな風にできた
  • 必要なもの
    • REST データ処理用 RSDファイルの作成
    • Google BigQuery の準備
    • CDataSyncのインストール
    • REST データソースの設定
    • BigQueryへの同期先設定
    • ジョブの作成
    • テスト実行
    • Google Data Portal でビジュアライズ
  • さいごに
続きを読む

Tesla API が触りたいけれど、車が高くて買えないので、Tesla API の Mock API Server を作って、擬似的に Tesla を所有している感覚を API で体験する

Tesla ご存知ですか? そう、あの Tesla です。最近日本でも Model 3が出始めて、人気沸騰中(だと個人的に思っている)の電気自動車のことです。

https://www.tesla.com/ja_jp

f:id:sugimomoto:20200120222922p:plain

続きを読む

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。

素晴らしい。