我有一个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结构?
答案 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