我正在为一个 REST API 开发一个 Ruby 绑定,并且正在为它的一部分而被认为是惯用的 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
它正在创造我不确定的新资源。
我考虑过在数组子类上有一个 create 方法:
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")
在上面的三种方法中,我更喜欢第一种,因为它简洁并且允许链接创建。第三个选项类似,但感觉不对 - 就 REST API 而言,创建发生在错误的级别,因为它是允许创建组的组资源。也就是说,我不是一个经验丰富的 Ruby 开发人员,首先,我希望 Ruby API 对 Ruby 开发人员来说是惯用的,即使这意味着它与 REST API 的模型不完全匹配。