0

我正在为我的项目设计一个新的 API,并且我想将具有嵌套子项的对象作为 json 返回。为此,我决定使用 RABL。

我希望客户端能够了解对象是否有效,如果不是,哪些字段丢失以便正确保存。

我想到的设计应该包括一些可选的字段,在可选的哈希下,其余的都是必需的。必填字段应出现在 json 的根目录下。所以我试图描述的输出应该是这样的:

{
    "name": "John",
    "last_name": "Doe",
    "optional": {
        "address": "Beverly Hills 90210",
        "phones":[{"number":"123456","name":"work"}, {"number":"654321","name":"mobile"}]
    }
}

上面的输出示例描述了必填字段 name 和 last name,以及不需要的 address 和电话(与对象的 belongs_to-has_many 关系相关联)。name、last_name 和 address 是用户的数据库字段。

与 RABL 一起玩到目前为止,我还没有设法创建这种结构。

有什么建议么?我正在寻找一种 DRY 方法来为我的所有模型实现这一点。

4

2 回答 2

1

RABL 在动态创建 JSON 结构方面非常出色,所以我不明白为什么您无法实现目标。您是否尝试测试架构中的字段是否设置为可空,从而将其显示为可选?这对我来说似乎是一个很好的方法。对于嵌套的孩子,只需做同样的事情,但为孩子扩展模板。

例如,在您father/show.rabl显示的自定义节点:optional中,所有属性都可以为空。

child/show.rabl然后,用相同的逻辑创建一个。最后,返回father/show.rabl并添加一个子节点,扩展child/show.rabl模板。通过这种方式,您可以实现无限级别的“可选”。

希望对您有所帮助。

于 2012-08-13T15:03:08.457 回答
0

在这种情况下,我会使用自由格式选项。

来自https://github.com/nesquena/rabl

也可能存在响应的根级别不直接映射到任何对象的奇怪情况。

在这些情况下,可以将对象分配给“假”,并且可以自由构造节点。

object false
node(:some_count) { |m| @user.posts.count }
child(@user) { attribute :name }
于 2013-10-09T15:37:21.930 回答