「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
Data API Library for Xamarin(その5・初期化とSendメソッド)
今回から、Data API Library for Xamarinでのプログラムの書き方を解説します。
今日は、初期化とSendメソッドについて解説します。
1.using文の追加
まず、Data API Library for Xamarinを使いたいソースで、先頭部分に以下の2行のusing文を追加します。
using Newtonsoft.Json.Linq; using MovableType;
2.初期化
初期化を行うには、DataAPIクラスのオブジェクトを作成します。
コンストラクタのパラメータとして、以下の2つを取ります。
- mt-data-api.cgiのディレクトリ
- クライアントID
クライアントIDは、Data APIでMovable Typeにアクセスするアプリを表す文字列です。
半角英数字で任意のIDを決めて指定します。
例えば、Xamarin.Formsでアプリのクラス(App.xaml.cs)のコンストラクタでData APIの初期化も行うとします。
mt-data-api.cgiが「http://www.foo.com/mt/」ディレクトリにあるとします。
また、クライアントIDを「example」にするとします。
この場合だと、App.xaml.csは以下のようなコードになります。
using System; using System.Collections.Generic; using Xamarin.Forms; using Newtonsoft.Json.Linq; using MovableType; namespace ネームスペース名 { public partial class App : Application { DataAPI api; public App () { InitializeComponent(); MainPage = new ネームスペース名.MainPage(); api = new DataAPI("example", "http://www.foo.com/mt/"); } ... } }
3.Sendメソッド
Data APIのオブジェクトを初期化すると、「Send」というメソッドを使うことができます。
Sendメソッドは、Data APIで行う処理に応じて、様々な引数を取ります。
引数は以下の順に指定します。
項目 | データ型 | 内容 |
---|---|---|
メソッド名 | string | Data APIで行う処理のメソッド名を渡します。 JavaScriptライブラリでのメソッド名と同じものを使います。 |
サイトID | int | 操作する対象のサイト(ウェブサイトまたはブログ)のIDを指定します。 メソッドによっては、サイトIDを指定しないものもあり、その場合はサイトIDを省略します。 |
オブジェクトID | int | 操作する対象のオブジェクト(記事)等のIDを指定します。 メソッドによっては、オブジェクトIDを指定しないものもあり、その場合はオブジェクトIDを省略します。 |
オブジェクト | JObject | オブジェクトの作成/更新を行うメソッドでは、オブジェクトをJObject型で表したものを指定します。 作成/更新以外のメソッドではこの引数は省略します。 |
パラメータ | Dictionary<string, string> | メソッドのオプションのパラメータを指定します。 オプションのパラメータを指定しない場合は、この引数は省略します。 |
また、Data APIでは非同期処理を多用します。
C#では非同期処理を同期的に書けるasync/awaitという構文があります。
当ライブラリもasync/awaitを使っていて、Sendメソッドはこれらと組み合わせます。
Sendメソッドはawaitと共に使います。
また、Sendメソッドを含む関数には、asyncキーワードを追加します。
Sendメソッドの戻り値は、Data APIの処理結果になります。
戻り値の型はJObject型です。
例えば、クラスに記事の一覧を取得して返す「ListEntries」というメソッドを作るとします。
このメソッドは以下のように書きます。
public async Task<JObject> ListEntries(int site_id) { JObject resp; resp = await api.Send("listEntries", site_id); return resp; }