Rails 大家在开发 rails api 的时候是否遵循 jsonapi 规范

zeekerpro · 2023年09月22日 · 最后由 stephen 回复于 2023年09月26日 · 1914 次阅读

最近打算搞一个 rails API 前后端分离的项目,在使用 json 做数据交互的时候犹豫是否需要遵循jsonapi规范,

但是如果这样做的话就需要在后端做一次 serialize,然后数据到前端了还要做一遍 deserialize 的操作,这么做是否值得?

我之前用 json API 规范开发过一个项目,个人觉得 jsonapi 的接口有几个优点:

  1. 数据规范
  2. 对于复杂关联的数据结构可以通过 relationships 和 included 节省数据传输大小。 例如:
model A {
  has_many: modelB
}

正常查 modelA 列表,并 include model B 的时候,直接返回 json 的结构:

[
  A1: {
     ...
    bs: [b1, b2, b3 ...]
  },
  A2: {
     ...
    bs: [b1, b2, b3 ...]
  }
]

这时候如果 modelB 的属性多的话,b1, b2,b3 .. 等都会重复 to json,最后返回的 json 字符串就会很长。

如果使用 jsonapi 规范做序列化,会得到下面的结构:

data: [
  A1: {
    ...
    relationtships: {
      bs: [b1.id, b2.id, b3.id .....]
    }
  },
  A2: {
    ...
    relationtships: {
      bs: [b1.id, b2.id, b3.id .....]
    }
  }
],
included: [
  b1, b2, b3 ...
]

在 relationships 中只存了 relation 的 id,b1, b2, b3 都只做一遍序列化,然后存到 included 中

但是缺点也很明显:后端序列化后,前端又要做一遍反序列化,感觉有点麻烦。

不知道大家对于 jsonapi 规范是持什么态度,有踩过哪些坑么?

另外,我目前用的数据序列化和反序列化的轮子:

后端:jsonapi-serializer

前端:jsonapi-serializer

如果有比较好用的轮子也推荐一下。

不遵守 jsonapi 规范的话,我就用的 jbuilder。

看个人习惯啦,如果只是自己维护,怎么顺手怎么来

我一直在用的 后端 jsonapi-resources 前端 kitsu-core

一直使用 code、message、data

没必要,大家前后,定一个规则就好了,除非你说大公司。

小公司,几个人的,非得整 jsonapi,那就离撕逼不远了。

betang 回复

感谢分享,前端这个库还是第一次知道,先去了解一下

cisolarix 回复

这算不算另外一种 jsonapi 规范,哈哈

使用 jsonapi 后,当遇到 relationtships 和 included 多的情况,开发时用 postman 或 insomnia 来调试结果相当崩溃,没有普通 json 那样方便检查。有尝试安装 insomnia 的 jsonapi 插件,目测没变化,header 里面加入了 application/vnd.api+json 也没看出来和安装插件之前有何区别。

曾经用过,不建议使用,心智负担大,用了别人库,更新也很麻烦

kyvision 回复

确实,这种单独调试接口会比较难受

曾经也想试试 jsonapi, 但是团队里已经对 graphql 比较熟练了,对比下来 jsonapi 没有明显的优势,就没尝试用它来启新项目

没必要整那么严格

搞复杂了。jbuilder 就很好。

zeekerpro 回复

用自己最熟悉的格式就行

有时候完全按规范,太啰嗦。只要所有项目都用统一标准,其实习惯了也没什么。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号