CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す...
-
Upload
jun-ichi-sakamoto -
Category
Technology
-
view
1.432 -
download
4
Transcript of CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す...
![Page 1: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/1.jpg)
ブログ "Developer@ADJUST"
http://devadjust.exblog.jp/
Twitter: @jsakamoto
![Page 2: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/2.jpg)
Dozens (ダズンズ) とは?
クラウド時代に対応した DNS サービス。
無料で12レコード利用可能な Free プランあり。
月額 ¥1,000 の Basic プラン以降は TTL を1分にも変 更可能で、ダイナ ミックDNS として の利用も可能。
![Page 3: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/3.jpg)
REST API が公開されています
ゾーンやレコードの追加・取得・編集・削除が可能な REST API (Web API) が公開されている。
生の REST API を直接呼び出すコードを書くのは手間なので、クライアントアクセスライブラリの需要が。
Ruby 版が出現!
![Page 4: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/4.jpg)
負けじと Dozens API クライアントを .NET で書いてみた
Dozens API Client for .NET
CodePlex でオープンソース(Ms-PL)として公開
○ http://dozensapiclient.codeplex.com/
ソースコードは C# で記述。
バイナリは NuGet にも登録済み。
![Page 5: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/5.jpg)
.NET のアセンブリなので...
いろいろな言語・処理系から、このクライアントライブラリを使って、Dozens API を呼び出せるようになった!
![Page 6: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/6.jpg)
![Page 7: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/7.jpg)
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);
}
![Page 8: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/8.jpg)
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)
![Page 9: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/9.jpg)
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)
![Page 10: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/10.jpg)
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
![Page 11: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/11.jpg)
Small Basic (!) 残念ながら Dozens API Client
for .NET を直接は呼び出せません。
そこで、Small Basic 用拡張ライブラリとしてのラッパーを作成!
こちらも CodePlex でオープンソース公開。
くるくる回転するイ ンテリセンスと懇切 丁寧なパラメータヒ ントがステキです!
![Page 12: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/12.jpg)
以上、すべて動画あり。 YouTube にアップロード。
Dozens API Client for .NET の CodePlex ページからたどれます。
![Page 13: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/13.jpg)
最新の追加情報
MacOS X "Lion" の mono 上の F# での動作も確認できました!
![Page 14: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/14.jpg)
まとめ
.NET というプラットフォームを選択したことで、 こんなにも利用可能な場面が広がるんだなー と、改めて実感しました。
当然、Windows OS も XP 以降、32bit/64bit 問わず利用可能です。
![Page 15: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/15.jpg)
おまけ
![Page 16: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/16.jpg)
PowerShell は.NET4上で動作していなかった。
当初.NET4版で作成していたが、.NET3.5に焼き直し。
PowerShellを.NET4上で動作させるように、レジストリ設定で変更することは可能です。
![Page 17: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/17.jpg)
.NET3.5用に焼き直したときに、デフォルト引数が使えたのに一瞬びっくり。
でも、よく考えたら、デフォルト引数はコンパイラの機能であって、ランタイムの機能ではないので、当たり前といえば当たり前。
.NET 2.0用のプロジェクトでも、コンパイラさえ最新なら、var とか拡張メソッドとか使えたでしょう?
![Page 18: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/18.jpg)
int? と F# は相性悪かった
C# では「1」とかけば済む引数が、「Nullable 1」 と書かなくてはならず せっかくの F# のシンプルさが台無し!
許せなかったので、int? をやめて object に変更。
![Page 19: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/19.jpg)
COM では引数無しコンストラクタしか使えなかった
ユーザーIDとAPI Keyの指定は必須なので、当初はコンストラクタで指定するようにしていた。
しかし、COM クライアントから呼びだされる場合は、コンストラクタに引数を与えることができない。
致し方なく、引数無しのコンストラクタと、Authメソッドを別途実装。
![Page 20: CLR/H第61回勉強会ライトニングトーク - DNS サービス Dozens の API を呼び出す .NET ライブラリを書いてみた](https://reader034.fdocument.pub/reader034/viewer/2022052523/556a5546d8b42a7a138b4a2b/html5/thumbnails/20.jpg)
オーバーロードと COM は相性悪かった
COM にはオーバーロードの概念がないのでした。
メソッド名の末尾に "~_1" とかのサフィックスがつく羽目に。
例) CreateRecord_2
COM はさすがに着々と過去のものになりつつあると思うので、これに執着するのはあきらめた。