CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す...

Post on 31-May-2015

1.433 views 4 download

Transcript of CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す...

ブログ "Developer@ADJUST"

http://devadjust.exblog.jp/

Twitter: @jsakamoto

Dozens (ダズンズ) とは?

クラウド時代に対応した DNS サービス。

無料で12レコード利用可能な Free プランあり。

月額 ¥1,000 の Basic プラン以降は TTL を1分にも変 更可能で、ダイナ ミックDNS として の利用も可能。

REST API が公開されています

ゾーンやレコードの追加・取得・編集・削除が可能な REST API (Web API) が公開されている。

生の REST API を直接呼び出すコードを書くのは手間なので、クライアントアクセスライブラリの需要が。

Ruby 版が出現!

負けじと Dozens API クライアントを .NET で書いてみた

Dozens API Client for .NET

CodePlex でオープンソース(Ms-PL)として公開

○ http://dozensapiclient.codeplex.com/

ソースコードは C# で記述。

バイナリは NuGet にも登録済み。

.NET のアセンブリなので...

いろいろな言語・処理系から、このクライアントライブラリを使って、Dozens API を呼び出せるようになった!

C#

当然、VB.net でも同様に使えます。

NuGet から容易にプロジェクトに追加可能!

using DozenAPI;

...

static void Main(){

var dozens = new Dozens("UserId","APIKey");

dozens.UpdateRecord("www.hoge.jp", null, "192.168.0.1", 7200);

}

Windows Power Shell

Windows Power Shell からは、.NETのクラスライブラリを呼び出し可能なので、当たり前ですね!

インテリセンスとまではいきませんが、Tabキーでメンバを補完・列挙できます。

>[System.Reflection.Assembly]::LoadFile("C:¥Work¥Dozens.dll")

>$dozens = New-Object DozensAPI.Dozens("UserId", "APIKey")

>$dozens.UpdateRecord("hoge.jp","www",$NULL,"192.168.0.1",7200)

F# スクリプト カラー構文表示・インテリセンス・パラメータヒント・リアルタイム構文チェック・対話環境が使える、.NET呼び出し放題の最強のスクリプト言語!

もちろん、普通に "F#" のアプリ(.exe)としても使えます。

#I "C:¥¥work"

#r "Dozens.dll"

open DozenAPI

let dozens = new Dozens("UserId", "APIKey")

dozens.UpdateRecord("www.hoge.jp", null, "192.168.0.1", 7200)

JScript、VBScript (WSH)他

.NETはCOMとの相互運用が可能。

COM サーバーを呼び出せる処理系なら、Dozens API Client for .NET も、COM サーバーとして呼び出せるのでした!

Win 版 Ruby (Active Ruby) も COM 呼べるので、Ruby からも利用可能なはず!

○ Ruby版はちゃんとありますので、意味ないですが。

Set dozens = CreateObject("DozensAPI.Dozens")

dozens.Auth "UserId", "APIKey"

dozens.UpdateRecord_6 "www.hoge.jp", Nothing, "192.168.0.1", 7200

Small Basic (!) 残念ながら Dozens API Client

for .NET を直接は呼び出せません。

そこで、Small Basic 用拡張ライブラリとしてのラッパーを作成!

こちらも CodePlex でオープンソース公開。

くるくる回転するイ ンテリセンスと懇切 丁寧なパラメータヒ ントがステキです!

以上、すべて動画あり。 YouTube にアップロード。

Dozens API Client for .NET の CodePlex ページからたどれます。

最新の追加情報

MacOS X "Lion" の mono 上の F# での動作も確認できました!

まとめ

.NET というプラットフォームを選択したことで、 こんなにも利用可能な場面が広がるんだなー と、改めて実感しました。

当然、Windows OS も XP 以降、32bit/64bit 問わず利用可能です。

おまけ

PowerShell は.NET4上で動作していなかった。

当初.NET4版で作成していたが、.NET3.5に焼き直し。

PowerShellを.NET4上で動作させるように、レジストリ設定で変更することは可能です。

.NET3.5用に焼き直したときに、デフォルト引数が使えたのに一瞬びっくり。

でも、よく考えたら、デフォルト引数はコンパイラの機能であって、ランタイムの機能ではないので、当たり前といえば当たり前。

.NET 2.0用のプロジェクトでも、コンパイラさえ最新なら、var とか拡張メソッドとか使えたでしょう?

int? と F# は相性悪かった

C# では「1」とかけば済む引数が、「Nullable 1」 と書かなくてはならず せっかくの F# のシンプルさが台無し!

許せなかったので、int? をやめて object に変更。

COM では引数無しコンストラクタしか使えなかった

ユーザーIDとAPI Keyの指定は必須なので、当初はコンストラクタで指定するようにしていた。

しかし、COM クライアントから呼びだされる場合は、コンストラクタに引数を与えることができない。

致し方なく、引数無しのコンストラクタと、Authメソッドを別途実装。

オーバーロードと COM は相性悪かった

COM にはオーバーロードの概念がないのでした。

メソッド名の末尾に "~_1" とかのサフィックスがつく羽目に。

例) CreateRecord_2

COM はさすがに着々と過去のものになりつつあると思うので、これに執着するのはあきらめた。