【问题标题】:How to set Parameter Type 'body' in grape-swagger?如何在grape-swagger中设置参数类型'body'?
【发布时间】:2017-07-14 06:19:08
【问题描述】:

在 Swagger 中,您可以使用 Post 或 Put 选项在正文中输入 JSON。你有一个很好的模型和模型模式。 几个小时以来,我一直在寻找如何使用 Rails、Grape 和 Grape-Swagger 来实现这一点。文档和示例一样非常基础。任何帮助表示赞赏。

这就是我现在拥有的:

    params do
      requires :ticket_id, type: Integer, desc: "Ticket ID (case insensitive)"
      requires :body, type: String, desc: "ticket body" # <-- type should be body or something like this
    end
    put ':ticket_id' do
      ticket= Ticket.where(ticket_id: params[:ticket_id]).first
      if params[:body]
        body = JSON.parse(params[:body])
        description = body.map { |m| m[:description] }
        ticket_state = body.map { |m| m[:ticketState] }
        unless description.nil? or ticket_state.nil?
          ticket.description += description
          ticket.ticket_state = ticket_state
          ticket.change_date = Time.now
          ticket.save
        end
      end
      present ticket, with: API::V1::Entities::Ticket
    end

【问题讨论】:

    标签: ruby-on-rails swagger ruby-grape


    【解决方案1】:

    我不知道在创建原始帖子时这是否可能,但这解决了我今天的问题:

    params do
      optional :time, type: String, desc: 'Time string (ISO8601)', documentation: { param_type: 'body' }
    end
    

    它在正文中接受这个 JSON:

    {
      "time": "2012-04-23T18:25:43.511Z"
    }
    

    【讨论】:

    • 超级有用的伙伴。我无法相信所有自述文件,他们没有提到如何将类型更改为body。这有效地覆盖了参数的类型并 100% 工作。实体系统不足。
    【解决方案2】:

    使用grape-swagger、grape和grape-entity的github master分支,以下对我有用:

    class API::Entities::Request::Body < Grape::Entity
      expose :id, documentation: { type: 'integer', required: true }
    end
    
    class API::Entities::ResponseEntity< Grape::Entity
      expose :id, documentation: { type: 'integer', required: true }
    end
    
    desc 'Create batch',
          entity: API::Entities::ResponseEntity
    params do
      optional :request, type: API::Entities::Request::Body, desc: '...'
    end
    post '/test' do
    transformed_params = API::Entities::Request::Body.represent(params, serializable: true)
     {}
    end
    

    【讨论】:

    • 但是如果需要参数,该方法返回“{ request is missing }”。对吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    相关资源
    最近更新 更多