0

我正在尝试使用JSON API 规范在 Rails 中构建 API

我的用户模型具有与之关联的更改对象。例如,用户可以进行以下更改:

{
  id: 10,
  type: 'changes',
  diffs: [
    {
      subject: 'email',
      from: 'old@example.org',
      to: 'new@example.org'
    },
    {
      subject: 'tags',
      from: []
      to: [{ id: 1, type: 'tags', label: 'Ruby' }]
    }
  ]
}

如您所见,该diffs属性包含一组更改差异,第二个差异是一组对象差异。我想修改这种格式(如果可能的话),使其符合 JSON API 规范。像这样:

{
  subject: 'tags',
  from: []
  to: [{ id: 1, type: 'tags' }]
}

并将标签的属性放入包含的部分:

included: [
  {
    id: 1,
    type: 'tags',
    attributes: { label: 'Ruby' }
  }
]

问题:差异是一个对象数组(不是记录,它们没有 ID),其中包含带有记录的字段。是否可以将响应格式化为如此深嵌套的记录(如我的情况下的标签)将引用包含部分中的记录?

我想使用fast_jsonapi gem

4

1 回答 1

1

我认为你不能在不违反规范的情况下做到这一点。

资源对象必须包含一个id

“资源对象”出现在 JSON API 文档中以表示资源。

资源对象必须至少包含以下顶级成员:

  • ID
  • 类型

规范只允许一个例外:

例外:当资源对象源自客户端并表示要在服务器上创建的新资源时,不需要 id 成员。

因此,如果您diffs没有 ID,则无法将它们建模为资源对象。

但是不允许包含未被资源对象引用的资源:

复合文档需要“完全链接”,这意味着每个包含的资源必须由同一文档中的至少一个资源标识符对象标识。(来源

只有一个例外不适用于此处讨论的案例:

完整链接要求的唯一例外是通过稀疏字段集排除原本包含链接数据的关系字段。

于 2018-10-26T22:17:16.903 回答