在 API 中展示资源

presenting resources in API

我正在准备 Rails 5 API 并且我有一些 GET 端点,它们除了向最终用户提供资源外什么都不做。

我如何限制用户可以看到的内容。假设我有一个 table Books,带有 titleauthor 列,我希望最终用户使用 title 和一个 author 但我不想给他诸如 :id 或时间戳之类的东西。有没有现有的解决方案类似于葡萄必须提供的 present()Grape::Entity 类?

最简洁的方法是使用序列化程序。

# app/serializers/book_serializer.rb
class BookSerializer < ActiveModel::Serializer
  attributes :title, :author
end

然后在控制器中:

def show
  book = Book.find(params[:id])
  render json: book, serializer: BookSerializer
end