LoginSignup
2
3

More than 5 years have passed since last update.

appiaries の ruby ライブラリつくるよ gem で公開できたらなー ヽ(゚ー゚*ヽ)(ノ*゚ー゚)ノわぁい

Last updated at Posted at 2014-11-10

随時つくりながら更新してます

gemつくってみるよ。mBaaSの appiaries の ruby クライアントをつくるよ。

github はこちら

手順

ひながたの作成

bundle コマンドを使ってgemのひな形をつくります :smile: 自動的にいろんなファイルができるよ :file_folder:

bundle gem appiaries

今回は rest-client を使ってつくる予定なので、rest-clientを使った超軽量クライアントライブラリの一つである rekognize を参考にしてつくっていきます :eyes: .rb ファイルが5つぐらいなのでシンプルです :balloon:

と思ったけど、rekognize の実装がクソ :poop: なんじゃないかと・・・可読性低すぎる実装に見えて :cry: 、ruby の include ってこんな風につかうのか :sushi:

追記:読んでみたらひどかったので、rekognize は参考にしないことに :imp: parse-ruby-client https://github.com/adelevie/parse-ruby-client の実装が綺麗に見える。rest-client じゃなくて Faraday :zap: 使ってるけど。

設計というかこんな感じなつくりにする

:tractor: どんな設計にしましょう?appiaries はTOKEN :secret: を必ずリクエストに詰める必要があるので、それをinitializeでわたし感じとか、そういうことを考えていきます。

実装のポイント

  • token を初期化時に渡すようにする
  • パラメーターの ?get=true を自動的に付加するようにする
  • 戻りは強制的にJSON :question: いいのかな
  • endpointが複数あるのはどうしようかな・・・
  • とりあえず作成と参照からつくっていく感じ
  • JSONオブジェクトに対する操作の例:メソッド名称はパラメーターprocのものを採用
    • create 登録する
    • put 置き換え登録する
    • patch 更新する
    • delete 一括削除(検索条件指定した場合)
    • delete 一件削除またはオブジェクトのフィールド削除
    • get 検索
    • count 件数取得(検索条件指定)

:scream: delete が曖昧な感じ・・・他のライブラリのAPIを見て実装を合わせるか?Androidの実装はメソッド名にあたる部分がREST-APIと統一されてないのね :cry:

METHOD Android REST API
登録する registJsonData create
置き換え登録する putJsonData put
更新する updateJsonData patch
一括削除 deleteJsonData delete
フィールド削除 deleteJsonData delete
一件削除 deleteJsonData delete
一件取得 getJsonData get
検索 selectJsonData get
件数取得 count

整理してたら頭痛がしてきた :cry:

とりあえずつくってみよう

実装をどうしようかなぁ?

appiaries は主に Json と File という二つのオブジェクトを入れておける。とりあえず、それだけ考えてみる。User、Pushとかもあるけど :wink:

JSONオブジェクトの場合

JSON オブジェクトのappiariesとのやり取り :beer:

Jsonを扱うから、保存処理を

my_data = {"name" => "scleen"}
my_data.save

みたいに書けるようにしちゃうとか、やばい、恰好いい!でもやりすぎよね。 :smiling_imp:

require 'appiaries'
{"name" => "scleen"}.save

とか書いてJSON保存できるとか素敵 :dancer: だけど。

{"name" => "scleen"}.update(object_id) # for update
hoge = {}
hoge.get(object_id) # for get

とか、どう :question:

でも、これ、家の全ての窓 :house: に消せないクリスマス :christmas_tree: のデコレーション施すようなもんだ。クリスマスが過ぎたらいらないよね。Hash 自体がJSON保存以外の目的でもプログラム中で使われるから、この方法は却下。 :thumbsdown:

無難に parse-ruby-client みたいに書くのかな

Clientクラスを定義して、create, update でHash渡すような実装が無難かなぁ :sunglasses:

client = Appiaries::Client.new(opts)
client.create({"name" => "scleen"}) # create
client.get(object_id) # get

例えば↑上のこんな感じ :alien: これだと通信を行うclientを意識させる実装だよね。

REST-APIの面倒なのは

  • 適切なURIをつくる :earth_asia:
  • 所定の場所にパラメーターを収めること(queryパラメーターなのか、payloadなのか、headerなのか) :envelope:

だろうから、この辺を隠せていれば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

とか?

gem つくりかたの参考リンク

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3