Rails 选择 jsonapi-resources 的理由

zfben for 简单心理 · 2016年07月30日 · 最后由 zfben 回复于 2016年08月03日 · 2978 次阅读

Rails 5 发布时的官方日志里,推荐了三种用于构建 API 的 gem,分别是 JbuilderActive Model SerializersJSONAPI::Resources,其中前两种需要配合 rails-api 来使用,只有 jsonapi-resources 提供了 JSONAPI::ResourceController。

我们最终选择了 jsonapi-resources 主要基于以下原因:

  1. 它的 resource 语法与 active_model_serializers 相近,而我们之前使用的是 active_model_serializers
  2. active_model_serializers 不支持 abstract 特性,必须基于某个 model,而我们有些 resource 并非基于 model
  3. jsonapi-resources 内置了 fields 选项,可以方便的在请求端指定返回的字段,而不必返回全部字段
  4. 返回的数据结构符合 jsonapi 规范
  5. JSONAPI::ResourceController 提供了 RESTful 的封装,可以省去不少代码

以上的原因只是对目前项目来说最需要的特性,更多特性可以去看官方文档。

参考链接:

jsonapi-resources: https://github.com/cerebris/jsonapi-resources

jsonapi:http://jsonapi.org

原文地址: https://jiandanxinli.github.io/2016-07-30.html

active_model_serializers 用的我很不爽,各种不自由,也不 magic,跟 grape-entity 和 jbuilder 比相差甚远 jsonapi-resources 看起来很强大的样子,内置 fields 选项这个特性很实用

同纠结,但是感觉 JSONAPI::Resources 好复杂...在 rails5 下会不会太重了...相比之下,AMS 简单一些。没用过 Jbuilder...

没用过这个,刚刚看了看 JR 的文档。感觉我还是偏向 AMS 一些。 AMS 还是更偏向一个 serializer 的设置,这个 JR 则是把整个 api 都帮你做了。简单的项目比较方便,但是随着代码越来越复杂,gem 的便利不在的时候还是觉得单一功能更符合我喜好。 字段的筛选两个都可以做到。AMS 也有 json api 输出。

另外纠正下楼主,第二条对应的是 abstract 特性。immutable 是无法 put 或 patch。

#3 楼 @flypiggys 谢谢,已修正。目前项目中还没遇到因为复杂导致的坑,等遇到了会继续分享经验 😁

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