随時つくりながら更新してます
gemつくってみるよ。mBaaSの appiaries の ruby クライアントをつくるよ。
github はこちら
手順
ひながたの作成
bundle コマンドを使ってgemのひな形をつくります 自動的にいろんなファイルができるよ
bundle gem appiaries
今回は rest-client を使ってつくる予定なので、rest-clientを使った超軽量クライアントライブラリの一つである rekognize を参考にしてつくっていきます .rb ファイルが5つぐらいなのでシンプルです
と思ったけど、rekognize の実装がクソ なんじゃないかと・・・可読性低すぎる実装に見えて 、ruby の include ってこんな風につかうのか
追記:読んでみたらひどかったので、rekognize は参考にしないことに parse-ruby-client https://github.com/adelevie/parse-ruby-client の実装が綺麗に見える。rest-client じゃなくて Faraday 使ってるけど。
設計というかこんな感じなつくりにする
どんな設計にしましょう?appiaries はTOKEN を必ずリクエストに詰める必要があるので、それをinitializeでわたし感じとか、そういうことを考えていきます。
実装のポイント
- token を初期化時に渡すようにする
- パラメーターの ?get=true を自動的に付加するようにする
- 戻りは強制的にJSON いいのかな
- endpointが複数あるのはどうしようかな・・・
- とりあえず作成と参照からつくっていく感じ
- JSONオブジェクトに対する操作の例:メソッド名称はパラメーターprocのものを採用
- create 登録する
- put 置き換え登録する
- patch 更新する
- delete 一括削除(検索条件指定した場合)
- delete 一件削除またはオブジェクトのフィールド削除
- get 検索
- count 件数取得(検索条件指定)
delete が曖昧な感じ・・・他のライブラリのAPIを見て実装を合わせるか?Androidの実装はメソッド名にあたる部分がREST-APIと統一されてないのね
METHOD | Android | REST API |
---|---|---|
登録する | registJsonData | create |
置き換え登録する | putJsonData | put |
更新する | updateJsonData | patch |
一括削除 | deleteJsonData | delete |
フィールド削除 | deleteJsonData | delete |
一件削除 | deleteJsonData | delete |
一件取得 | getJsonData | get |
検索 | selectJsonData | get |
件数取得 | count |
整理してたら頭痛がしてきた
とりあえずつくってみよう
実装をどうしようかなぁ?
appiaries は主に Json と File という二つのオブジェクトを入れておける。とりあえず、それだけ考えてみる。User、Pushとかもあるけど
JSONオブジェクトの場合
JSON オブジェクトのappiariesとのやり取り
Jsonを扱うから、保存処理を
my_data = {"name" => "scleen"}
my_data.save
みたいに書けるようにしちゃうとか、やばい、恰好いい!でもやりすぎよね。
require 'appiaries'
{"name" => "scleen"}.save
とか書いてJSON保存できるとか素敵 だけど。
{"name" => "scleen"}.update(object_id) # for update
hoge = {}
hoge.get(object_id) # for get
とか、どう
でも、これ、家の全ての窓 に消せないクリスマス のデコレーション施すようなもんだ。クリスマスが過ぎたらいらないよね。Hash 自体がJSON保存以外の目的でもプログラム中で使われるから、この方法は却下。
無難に parse-ruby-client みたいに書くのかな
Clientクラスを定義して、create, update でHash渡すような実装が無難かなぁ
client = Appiaries::Client.new(opts)
client.create({"name" => "scleen"}) # create
client.get(object_id) # get
例えば↑上のこんな感じ これだと通信を行うclientを意識させる実装だよね。
REST-APIの面倒なのは
- 適切なURIをつくる
- 所定の場所にパラメーターを収めること(queryパラメーターなのか、payloadなのか、headerなのか)
だろうから、この辺を隠せていればOKなんじゃないかな
obj = AppiariesObject.new
obj["name"] = "scleen"
obj.create
とか、もありだよね。これはまるっきり parse-ruby-client の実装と同じだね。
この実装だと、よりオブジェクトが意識されてるね。
それともFileみたいに書く?
f = File.new(path_to_file)
f.write(something)
的な感じで
obj = AppiariesObject.new(object_name)
obj.create({"name" => "scleen"}) # create
とか?