サイボーズ社が提供している kintone は、開発インターフェースを持っており、REST API もサポートされています。
cybozu developer network
https://developer.cybozu.io/hc/ja
kintone API
https://developer.cybozu.io/hc/ja/articles/360028177472
REST API は PowerShell の Invoke-RestMethod でハンドリングできるので、PowerShell で kintone の操作が可能です。
僕が今まで使っていたパターンは、API キーを json にセットするパターンだったのですが、kintone の API はリクエストヘッダーに API キーをセットしたり、クライアント証明書を使ったりと、今まで扱っていたパターンと少々勝手が違っていたので技術情報としてまとめます。
PowerShell での API ハンドリングにフォーカスするので、kintone そのものの解説は割愛します。
まずは一番単純なレコード取得を例に API をどう叩くのか解説します。
レコードの取得(GET)
https://developer.cybozu.io/hc/ja/articles/202331474
リクエストパラメーターは、通常の REST API と同様に連想配列にセットし、-Body オプションに渡します。
|
kintone の REST API は、API キーを json にセットするのではなく、リクエストヘッダーに API キーではをセットします。
(kintone では API キーを「APIトークン」と呼んでいます)
PowerShell でリクエストヘッダーに API キーをセットするには、API キーを連想配列にセットし、-Headers オプションに渡します。
こんな感じでAPI キーを連想配列にセットします。
|
kintone の場合は、テナントごとに FQDN が異なっており、API ごとに URI が異なっています。
|
パラメーターが準備出来たら Get で API を叩きます
|
戻り値は json で返ってくるのですが、PowerShell が暗黙でオブジェクトに変換してくれるので、そのまま PowerShell で使うことが出来ます。
メンテナンス性も考慮してまとめると、こんな感じですね。
|
続いて、json 形式のデータを渡す Post の場合です。
レコードの登録(POST)
https://developer.cybozu.io/hc/ja/articles/202166160
POST の場合、引き渡すデータ形式が json であることを明示的に伝える必要があるのと、日本語を含む json を引き渡す際の考慮が必要です。
データ形式が json であることを宣言するには、リクエストヘッダーで Content-Type を指定するのですが、PowerShell の場合は -ContentType オプションがあるので、このオプションの引数に application/json を指定します。
kintone の場合、日本語データを扱うことが多いのですが、日本語を含む json はそのまま送信しても正しく受け取ってくれません。
この問題を回避するには、PowerShell 上で連想配列として扱っているデータを明示的に json 変換し、更にバイト配列に変換して送信します。
|
まとめるとこんな感じですね
|
ちなみに、レコードのフィールド名はフィールドの一覧で取得できる「Code」です。
フォームの設定の取得
https://developer.cybozu.io/hc/ja/articles/204783170
kintone の場合、アプリを API でハンドリングする場合は、アプリ毎に発行する API キーが使えるのですが、テナント情報そのものをハンドリングする場合は、この API キーが使えません。
例えば、テナントに登録している組織を取得する場合とかがこれに該当します。
組織エクスポートAPI
https://developer.cybozu.io/hc/ja/articles/202124754-組織エクスポートAPI
この場合、BASIC 認証を使うのですが、攻撃リスク低減のためにクライアント証明書を使うようにしている場合は、Invoke-RestMethod もクライアント証明書を使用する必要があります。
Windows の場合は、クライアント証明書をインストールして、拇印で証明書を指定する事が出来ますが、Windows 以外のプラットフォームではファイル状態のクライアント証明書をハンドリングします。
BASIC 認証とは、「ID」と「パスワード」を「:」で接続し、BASE64 でエンコードしたデータで認証する方式です。
こんな感じですね。
|
これで得られた BASE64 データを API キーに使用します。
kintone の場合は、リクエストヘッダーの「X-Cybozu-Authorization」にセットします。
|
Windows の場合は、クライアント証明書をインストールして、-CertificateThumbprint オプションで拇印を指定することが出来ます。
|
拇印の確認は Get-ChildItem で確認できます。
|
Windows 以外のプラットフォームでは、証明書をインストールすることが出来ないので、証明書ファイルそのものを使います。
証明書ファイルは .net の「X509Certificate2」で .pfx をハンドリングします。
|
PowerShell で VirusTotal の Web API を使ったファイルの安全性を確認する
https://www.vwnet.jp/Windows/PowerShell/2016100501/CheckVirusTotalWebAPI.htm
SOAP の PowerShell ハンドリング
http://www.vwnet.jp/Windows/PowerShell/2018042401/SOAPbyPowerShell.htm
Copyright © MURA All rights reserved.