REST API用のRubyバインディングに取り組んでおり、その一部として慣用Rubyと見なされています。簡単な例で説明するためにIdiomatic Rubyは、親を認識しているツリー内のノードを表すオブジェクトを作成するためのものです。
は、APIによって表されるリソースがツリー構造を形成する:
root
/\
/\
/ \
group group
/ /\
/ /\
/ / \
project project project
は子供の新しいインスタンスを作成するには、その親の知識が必要とされます。たとえば、新しいグループを作成するには、ルートの知識が必要です。ルートからグループを作成するためのURIを取得できるようにします。
私は、読み取りアクセス権を持つ合理的に満足している:それは私はわからない程度だ新しいリソースを作成しています
api = Api.new(...)
api.groups # An array of all groups
api.groups.select(...).projects # An array of all a group's projects
。
私は配列サブクラスのメソッドを作成したと考えられてきました:
group = api.groups.create("group-name")
project = group.projects.create("project-name")
コンストラクタの引数として親を取って、直接タイプのインスタンス化:
group = Group.new(api, "project-name")
project = Project.new(group, "project-name")
は、親のメソッドを作成します。
group = api.create_group("group-name")
project = group.create_project("project-name")
上記3つのアプローチのうち、私はそれがc onciseを使用して、作成を連鎖させることができます。 3番目のオプションは似ていますが、REST APIの点では、作成がグループの作成を許可するグループリソースであるため、間違ったレベルで発生しています。つまり、私は経験豊富なRuby開発者ではなく、まずRuby APIがREST APIのモデルと正確に一致しない場合でも、Ruby APIがRuby開発者にとって慣れ親しんでいることを願っています。
Railsの関連付けメソッドへのポインタをありがとう。謝罪、私の最初の例の2行目はタイプミスでした。それは、group.projects.create( "project-name")を読み込んでいるはずです。私は上記を訂正しました。 –
確かです。私はあなたの今修正された入力ミスを参照して私の答えの部分を削除しました。私の答えが十分に満足していれば、それを受け入れることが大いに感謝されるでしょう! – Cade