Это 2020 год - никто не должен Net::HTTP
больше использовать, и все ответы, похоже, говорят об этом, используйте гем более высокого уровня, такой как Faraday - Github
Тем не менее, то, что мне нравится делать, - это оболочка вокруг вызова HTTP api, что-то вроде
rv = Transporter::FaradayHttp[url, options]
потому что это позволяет мне подделывать HTTP-вызовы без дополнительных зависимостей, то есть:
if InfoSig.env?(:test) && !(url.to_s =~ /localhost/)
response_body = FakerForTests[url: url, options: options]
else
conn = Faraday::Connection.new url, connection_options
Там , где обманщик выглядит как эта
Я знаю, что существуют фреймворки имитации / заглушки HTTP, но, по крайней мере, когда я исследовал в прошлый раз, они не позволяли мне эффективно проверять запросы, и они были только для HTTP, а не, например, для необработанных обменов TCP, эта система позволяет мне иметь единая структура для всего API-взаимодействия.
Предполагая, что вы просто хотите быстро и грязно преобразовать хэш в json, отправьте json на удаленный хост, чтобы протестировать API и проанализировать ответ на ruby, это, вероятно, самый быстрый способ без использования дополнительных драгоценных камней:
JSON.load `curl -H 'Content-Type:application/json' -H 'Accept:application/json' -X POST localhost:3000/simple_api -d '#{message.to_json}'`
Надеюсь, это само собой разумеется, но не используйте это в производстве.
req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'})