首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包括符合JSON规范的非关联对象响应

包括符合JSON规范的非关联对象响应
EN

Stack Overflow用户
提问于 2018-10-25 12:25:20
回答 1查看 578关注 0票数 0

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

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

代码语言:javascript
复制
{
  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规范。如下所示:

代码语言:javascript
复制
{
  subject: 'tags',
  from: []
  to: [{ id: 1, type: 'tags' }]
}

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

代码语言:javascript
复制
included: [
  {
    id: 1,
    type: 'tags',
    attributes: { label: 'Ruby' }
  }
]

问题:差异是一个对象数组(不是记录,它们没有ID),其中包含有记录的字段。是否有可能将响应格式化成如此深层次的嵌套记录(如我的例子中的标记)将引用所包含部分中的记录?

我想使用jsonapi宝石

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-26 22:17:16

我不认为你能做到这一点而不违反规范。

资源对象必须包含id。

“resources”出现在JSON文档中,以表示资源。 资源对象必须至少包含以下顶级成员:

  • id
  • 类型

规范只允许一个例外:

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

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

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

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

只有一个例外不适用于这里讨论的情况:

完全链接要求的唯一例外是,当本来包含链接数据的关系字段通过稀疏字段集被排除时。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52989232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档