我最近想开始在我的网站中实现 API,但由于我缺乏关于如何使用 Ruby on Rails 正确发送 JSON 数据的知识,我遇到了一些关于验证的问题。我过去曾使用过一些 API 和 JSON,但这是我第一次同时使用这两种方法,而且我在 RoR 方面的经验仍然不足。
我的第一直觉是将参数连接到 url 上,在看到来自 API 的更积极(尽管仍然不完整)的 JSON 响应后,我认为我走在正确的轨道上,但在未能获得成功的响应后,我开始深入研究我确切地发送了什么,那是我注意到两个问题的时候。
第一个问题是 URL 中有敏感信息,例如我的 clientID,有关购买的信息,例如价格和描述,以及使用 MD5 加密的密钥和一些加密盐,但根据文档,它是安全的,只是为了比较有了服务器接收到的信息,所以总而言之我不太担心会泄露那种信息。我仍然想改进我的代码并尽可能多地保护信息。
我的第二个问题更重要,我注意到发送的信息不完整,因为 url 参数中的空间有限。
就在那时我知道我做错了什么,所以我开始寻找替代方案,最好是使用 POST 响应,但是我仍然缺乏关于如何使用 POST 正确发送参数的知识,并且当我尝试使用表单时,信息仍然存在,更糟糕的是,与我之前的尝试不同,我发送的参数在另一端似乎是空的,所以我开始深入研究它。
然后我发现link_to helper可以发送参数,但是经过一些测试它不起作用然后我发现用rails向外部站点发送参数,建议的方法是将参数连接到url中,所以我来了回完整圈。
所以我的问题是,如何在没有表单(因为所有信息之前都在之前的表单中填写过)的情况下将参数发送到外部网站(最好同时保持所有信息尽可能安全)?
虽然我之前使用过 API 和 JSON,但它们仍然是我不太习惯使用它们的主题,并且在某种程度上我仍然在 RoR 中学到了很多东西。
这是给我带来最多结果的代码(真实的看起来有点不同):
我的控制器order_controller.rb
def confirm_order
#Here I group all the parameters I'll need
@payment_params = []
description = "create_"+ @order.name.gsub(' ','_')
device_info = "WEB"
currency = @order.currency
fee = @order.price
#this was to concatenate the url, previouly I had the name of each parameter and the "&" taken into account, the response was different as I added each.
@payment_params << description << device_info << currency << fee
end
在我看来,confirm_order.html.erb类似
<a href= <%="https://payexample/something/order?"+ @payment_params%> >Confirm order</a>
欢迎任何见解,但现在我真的对如何解决这个问题一无所知,因为我已经用尽了我所学到的一切。