在 Rails API 中实施稀疏字段集

Implement sparse fieldset in Rails API

我将 rails-api 与序列化器一起使用,我特别在寻找一种简单的方法来实现 "sparse fieldset",这意味着我希望我的 Rails API仅渲染 (json) 我在参数 fields:

中给出的字段
http://api.website.com/v1/ressource/id?fields=field1,field2

我知道我们可以通过 params[:field]field1field2 等放入资源控制器中,但我仍然不确定:必须将问题修复到控制器中?模型 ?序列化器 ?

关于这个话题我看到的帖子很少,最终没有人对这个问题给出强烈而普遍的回应。 Rails API 的知名度如何?

提前感谢您的解释和建议。

通常,通过序列化程序在 api 响应中限制字段。

  • 方法 1:如果您的字段值是动态的 在你的控制器中,你可以做这样的事情:假设你的资源对应于 Resource

    fieldset = params[:fields].split(',')
    resource_id = params[:id]
    resource = Resource.where(id: resource_id).select([fieldset])
    render json: resource.first
    
  • 方法 2:如果你有固定的字段排列,你可以为每个组合使用不同的序列化程序

    在您的控制器中,不要接受字段,而是接受您想使用的序列化程序

    resource = Resource.find_by(id: resource_id)
    serializer = params[:serializer]
    render json: resource.first, serializer: serializer: Serializer1 if serializer == 'serializer1'
    

使用 ActiveModelSerializers 的 master 分支,您可以使用 JsonApi 适配器的 fields 选项,这正是您所期望的。