Использование Ruby on Rails для размещения данных JSON / XML в веб-сервисе - PullRequest
1 голос
/ 08 сентября 2011

Я создал веб-сервис на основе Spring Framework на Java и запустил его на tc-сервере на localhost.Я протестировал веб-сервис с помощью curl, и он работает.Другими словами, эта команда curl опубликует новую транзакцию в веб-сервисе.

curl -X POST -H 'Accept:application/json' -H 'Content-Type: application/json' http://localhost:8080/BarcodePayment/transactions/ --data '{"id":5,"amount":5.0,"paid":true}'

Теперь я создаю веб-приложение с использованием RoR и хотел бы сделать что-то подобное.Как я могу построить это?По сути, веб-приложение RoR будет клиентом, который отправляет сообщения в веб-службу.

При поиске в SO и в Интернете я нашел несколько полезных ссылок, но не могу заставить его работать.Например, из этой записи он / она использует net / http.

Я пытался, но это не работает.В моем контроллере у меня есть

  require 'net/http'
  require "uri"

 def post_webservice
      @transaction = Transaction.find(params[:id])
      @transaction.update_attribute(:checkout_started, true);

      # do a post service to localhost:8080/BarcodePayment/transactions
      # use net/http
      url = URI.parse('http://localhost:8080/BarcodePayment/transactions/')
      response = Net::HTTP::Post.new(url_path)
      request.content_type = 'application/json'
      request.body = '{"id":5,"amount":5.0,"paid":true}'
      response = Net::HTTP.start(url.host, url.port) {|http| http.request(request) }

      assert_equal '201 Created', response.get_fields('Status')[0]
    end

Возвращается с ошибкой:

undefined local variable or method `url_path' for #<TransactionsController:0x0000010287ed28>

Пример используемого кода: здесь

Я не привязан к net / http и не возражаю против использования других инструментов, если я могу легко выполнить ту же задачу.

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

1 Ответ

1 голос
/ 08 сентября 2011
url = URI.parse('http://localhost:8080/BarcodePayment/transactions/')
response = Net::HTTP::Post.new(url_path)

Ваша проблема именно в том, что вам сказал переводчик: url_path не объявлен.вам нужно вызвать метод #path для переменной url, которую вы объявили в предыдущей строке.

url = URI.parse('http://localhost:8080/BarcodePayment/transactions/')
response = Net::HTTP::Post.new(url.path)

должно работать.

...