2013-07-30 25 views
5

Tôi hiện đang phát triển ứng dụng Rails, trong đó tôi cần gửi động XML yêu cầu tới dịch vụ web bên ngoài. Tôi chưa bao giờ làm điều này trước đây và tôi đã mất một chút.Tạo XML động và đăng nó lên dịch vụ web trong Rails

Chính xác hơn, tôi cần gửi yêu cầu cho đối tác hậu cần của mình khi trạng thái của đơn đặt hàng được cập nhật. Ví dụ: khi đơn hàng được xác nhận, tôi cần gửi dữ liệu như địa chỉ của khách hàng, địa chỉ nhận hàng, v.v ...

Tôi định sử dụng trình tạo XML để tạo động yêu cầu và Net: HTTP hoặc HTTParty để đăng yêu cầu, dựa trên this example.

Đó có phải là cách phù hợp để làm như vậy không? Làm thế nào tôi có thể tạo ra các yêu cầu XML bên ngoài bộ điều khiển và sau đó sử dụng nó trong HTTParty hoặc Net: HTTP?

Nhờ sự giúp đỡ của bạn,

Clem

Trả lời

6

Đó phương pháp sẽ chỉ làm việc tốt.

Để biết cách tải XML ở nơi bạn cần, chỉ cần chuyển nó vào bất kỳ dữ liệu nào khác. Bạn có thể sử dụng trình diễn Builder, sẽ tự động chuyển đổi thành một Chuỗi thích hợp, hoặc bạn có thể truyền xung quanh một phiên bản đã được xâu chuỗi (to_s) của đối tượng Builder.

Nếu, ví dụ, nó có ý nghĩa đối với mô hình của bạn (mà chúng tôi sẽ gọi OrderStatus) để tạo ra XML, và cho điều khiển của bạn để gửi yêu cầu:

# Model (order_status.rb) 
def to_xml 
    xml = Builder::XmlMarkup.new 
    ... # Your code here 
    xml 
end 

 

# Controller (order_statuses_controller.rb) 
def some_method 
    @order_status = OrderStatus.find(:some_criteria) 
    ... # Your code here 
    http = Net::HTTP.new("www.thewebservicedomain.com") 
    response = http.post("/some/path/here", @order_status.to_xml) 
end 

Bạn có thể muốn bao bọc các cuộc gọi HTTP trong một khối begin/rescue/end và làm điều gì đó với phản hồi, nhưng nếu không thì tất cả đều đơn giản và đơn giản.

Tạo XML bằng Trình tạo, sau đó gửi xuống dây.

Trong trường hợp của bạn, có vẻ như bạn có thể cần phải gửi một số yêu cầu khác nhau khi đơn hàng phát triển; trong trường hợp đó:

  1. Lên kế hoạch cho những trạng thái có thể có của bạn.
  2. Xác định dữ liệu nào cần được gửi cho từng tiểu bang.
  3. Quyết định cách thể hiện trạng thái đó trong các mô hình của bạn, để bạn có thể gửi yêu cầu thích hợp khi trạng thái thay đổi.

Trường hợp ví dụ của tôi sử dụng một phương pháp để tạo XML, có thể bạn sẽ muốn 5 phương pháp để xử lý 5 trạng thái trật tự có thể.

+0

Cảm ơn rất nhiều về colinm câu trả lời của bạn và để biết chi tiết về cách tạo XML! Thật vậy, tôi sẽ cần phải gửi một số yêu cầu khác nhau cho các tiểu bang khác nhau (được biểu diễn bằng máy trạng thái) nhưng tôi nghĩ tôi có thể xử lý nó ngay bây giờ! – ClemDoum

Các vấn đề liên quan