Виноградный POST запрос на получение JSON

У меня проблемы с виноградом. Я попытался заглянуть в их документы и погуглить. Я не мог найти решение или образец по этому поводу.

Допустим, я отправляю этот формат в запрос POST винограда:

 {
    "preferences": {
        "play": {
            "weekdays": "5",
            "weekend": "8"
        },
        "grow": {
            "weekdays": "4",
            "weekend": "8"
        }
    }
}

Вопросы:

  1. Как настроить параметры Grape для получения этого сообщения? Я пробовал что-то вроде этого:
  params do
    optional :preferences, type: Hash  do
      optional :play do
        optional :weekdays
        optional :weekend
      end
      optional :grow, type: Hash do
        optional :weekdays
        optional :weekend
      end
    end
  end
  1. Я использую почтальон, чтобы сделать POST на моем Chrome. У меня вопрос: как мне установить хэш-параметры? У почтальона есть 3 варианта: data-data, form-urlencoded и raw. Я пробовал с form-data и raw (json), он не работает для raw json, он выдал ошибку, говорящую, что запрошенный тип содержимого 'text/plain' не поддерживается

Любая идея, как я могу исправить эти проблемы?

большое спасибо

1 ответ

Ответ на вопрос 1: Если все параметры являются необязательными, вам даже не нужно params блок. Избавьтесь от этого и, например, используйте params[:preferences][:play][:weekdays] чтобы получить доступ к атрибуту будних дней. Просто используйте ту же идею для доступа к другим значениям.

Ответ на вопрос 2: На Почтальоне, используйте RAW, но не забудьте установить заголовок Content-Type в application/json, Я написал код ниже, чтобы поиграть с этим примером.

require 'grape'

class API < Grape::API
    version 'v1', :using => :header, :vendor => 'alienlabz', :format => :json
    format :json
    resource :preferences do
        post do
            puts params[:preferences][:play][:weekdays]
        end
    end
end

run API
Другие вопросы по тегам