我正在使用外部API来接收待处理的订单。我已经成功编写了一个GET请求方法,可以将任何挂单保存到PostgreSQL。
我遇到的问题是,在每次GET请求期间,我都会创建重复项,因为它会再次下载所有挂单(旧的和新的)。
在我的GET请求中是否有办法,我可以检查数据库中以前下载的挂单,忽略它们,只下载新创建的挂单?
REST Gem我正在使用:
其余的客户端
这是我的工作GET请求:
def download_pf_orders
download_count = 0
uri = "#{PF_TEST_PENDING_API_URL}"
rest_resource = RestClient::Resource.new(uri, PF_TEST_USERNAME, PF_TEST_PASSWORD)
begin
response = rest_resource.get(accept: 'application/json')
json = JSON.parse(response)
json.each do |data|
sequence = data['SequenceNumber']
puts "### Last Sequence Number: #{sequence}"
PfOrder.create(
sequence_number: data['SequenceNumber'],
message_guid: data['MessageGuid'],
hl7_document: data['Hl7Document']
)
download_count += 1
end
rescue => e
puts "### Status Code: #{e.response.code} ###"
end
puts "### Downloaded Orders: #{download_count} ###"
end
答案 0 :(得分:0)
您是否也可以控制远程服务器?你可以更新它只发送你以前没有拿过的东西吗?如果没有,那么如何仅询问在日期X之后创建的帖子(这是您上次获取的日期)?如果没有,那么获取它们全部,只检查你的数据库并且只创建一个新的记录,如果你还没有(序列号是唯一的吗?如果序列号已经在你的数据库中,那么跳过那一行)
答案 1 :(得分:0)
我想出来了。这是我更新的GET方法:
def download_pf_orders
download_count = 0
uri = "#{PF_TEST_PENDING_API_URL}"
rest_resource = RestClient::Resource.new(uri, PF_TEST_USERNAME, PF_TEST_PASSWORD)
begin
response = rest_resource.get(accept: 'application/json')
json = JSON.parse(response)
json.each do |data|
sequence = data['SequenceNumber']
puts "### Last Sequence Number: #{sequence}"
pending_order = PfOrder.new(
sequence_number: data['SequenceNumber'],
message_guid: data['MessageGuid'],
hl7_document: data['Hl7Document'],
)
sn = pending_order.sequence_number
mg = pending_order.message_guid
hd = pending_order.hl7_document
PfOrder.find_or_create_by(sequence_number: sn, message_guid: mg, hl7_document: hd)
download_count += 1
end
rescue => e
puts "### Status Code: #{e.response.code} ###"
end
puts "### Downloaded Orders: #{download_count} ###"
end