Jest rok 2020 - nikt nie powinien już używać Net::HTTP
i wszystkie odpowiedzi wydają się tak mówić, użyj klejnotu wyższego poziomu, takiego jak Faraday - Github
To powiedziawszy, to, co lubię robić, to otoka wokół wywołania HTTP api, coś, co nazywa się
rv = Transporter::FaradayHttp[url, options]
ponieważ pozwala mi to na fałszywe wywołania HTTP bez dodatkowych zależności, tj .:
if InfoSig.env?(:test) && !(url.to_s =~ /localhost/)
response_body = FakerForTests[url: url, options: options]
else
conn = Faraday::Connection.new url, connection_options
Gdzie faker wygląda coś jak ten
Wiem, że istnieją frameworki HTTP mocking / stubbing, ale przynajmniej kiedy ostatnio badałem, nie pozwalały mi one na wydajną walidację żądań i były przeznaczone tylko dla HTTP, a nie na przykład dla surowych wymian TCP, ten system pozwala mi mieć ujednolicona struktura dla całej komunikacji API.
Zakładając, że chcesz po prostu szybko i brudnie przekonwertować hash na json, wyślij json do zdalnego hosta, aby przetestować API i przeanalizować odpowiedź na ruby, jest to prawdopodobnie najszybszy sposób bez angażowania dodatkowych klejnotów:
JSON.load `curl -H 'Content-Type:application/json' -H 'Accept:application/json' -X POST localhost:3000/simple_api -d '#{message.to_json}'`
Mam nadzieję, że jest to oczywiste, ale nie używaj tego w produkcji.
req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'})