如何使用rails& amp;创建API方法swested嵌套资源的文档

时间:2014-03-28 10:27:34

标签: ruby-on-rails json api resources swagger

我有一个rails应用程序,使用活动记录序列化程序来响应json或html。我正在使用它来创建一个公共API。我正在使用devise simple http进行基本身份验证。

我正在使用Swagger文档,通过以下宝石。

gem 'swagger-docs' #for creating the swagger json format gem 'swagger-ui_rails' #for generating the swanky active docs UI

我已经能够通过控制器成功为我的主要顶级资源创建json。例如,在“products_controller.rb”中:

swagger_controller :products, "Product Management"

  swagger_api :index do
    summary "Fetches all Products"
    param :query, :page, :integer, :optional, "Page number"
    response :unauthorized
    response :success
  end

问题是如何设置嵌套资源。

因此,在我的架构中,Products has_many Slots / Slots属于Product。所以,在我的“slots_controller.rb”中,我以相同的方式设置它:

swagger_controller :slots, "Slot Management"

  swagger_api :index do
    summary "Fetches all Slots for a Product"
    param :query, :page, :integer, :optional, "Page number"
    param :form, :product_id, :integer, :required, "Product id"
    response :unauthorized
    response :success
  end

我认为这是一厢情愿的想法,提供:product_id的参数以及使用产品ID的控制器操作来查找给定产品的插槽,然后招摇可能会自动将其解释为嵌套资源。似乎没有,相反,我在Swagger中的插槽API方法正在寻找:

/api/v1/slots.json

而不是

/api/v1/products/#{product.id}/slots

如何设置swagger_controller以为Slots生成正确的嵌套url结构?

1 个答案:

答案 0 :(得分:1)

不确定您是否已经解决了这个问题,但您可以使用:path param_type,如下所示:

swagger_api :index do
  summary "Fetches all Slots for a Product"
  param :path, :product_id, :integer, :required, "Product id"
  param :query, :page, :integer, :optional, "Page number"
  response :unauthorized
  response :success
end