在 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]
将 field1
、field2
等放入资源控制器中,但我仍然不确定:必须将问题修复到控制器中?模型 ?序列化器 ?
关于这个话题我看到的帖子很少,最终没有人对这个问题给出强烈而普遍的回应。 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
选项,这正是您所期望的。
我将 rails-api
与序列化器一起使用,我特别在寻找一种简单的方法来实现 "sparse fieldset",这意味着我希望我的 Rails API仅渲染 (json) 我在参数 fields
:
http://api.website.com/v1/ressource/id?fields=field1,field2
我知道我们可以通过 params[:field]
将 field1
、field2
等放入资源控制器中,但我仍然不确定:必须将问题修复到控制器中?模型 ?序列化器 ?
关于这个话题我看到的帖子很少,最终没有人对这个问题给出强烈而普遍的回应。 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
选项,这正是您所期望的。