我正在 vb.net 2013 Express中编写一些代码,以通过私人应用程序访问Xero会计,并且运行良好。但是,在尝试编写一些代码以从单个XML文件上传多个联系人时,我遇到了问题。我解析 XML,从每行创建一个新联系人,并将其添加到联系人列表中。然后我把这些提交给 Xero:
try
dim sResult = private_app_api.Create(mContacts)
Catch ex As Xero.Api.Infrastructure.Exceptions.ValidationException
' do something with ex to determine what went wrong
end try
如果所有联系人都正确创建,sresult
将包含这些联系人及其 Xero-GUID 的列表,然后我需要将其反馈到发送它们的系统。这一切都可以正常工作。
如果一个或多个联系人由于某种原因未创建,我会得到ex.ValidationErrors()
集合中一个或多个错误的列表,但我在sresult
中没有任何结果。所以,我没有参考那些已经奏效的,只有那些没有奏效的。
为了解决这个问题,我正在循环访问每个联系人并预先检查它们是否在 Xero 上不存在,并且没有重复的名称。这也有效,这意味着我只提交我知道尚未在 Xero 上的联系人。
不过,我现在担心的是,我将在滚动的 60 秒窗口中遇到 Xero API 限制,即 60 次调用。我试图通过预先检查大多数可能导致问题的常见事情来使代码健壮,但每次我这样做时,我都会接近极限,这在理论上意味着我需要通过尝试限制对 Xero 的调用来增加一些复杂性。
有没有更好的方法可以调用.create()
并获取成功信息和错误信息?
我认为解决这个问题的方法似乎是在我第一次创建 API 对象时添加对 RateLimiter 的引用。这似乎实现了一种方法,其中任何超过速率限制的呼叫都会自动暂停。不过,似乎有必要将限制设置为每 60 秒滚动窗口略低于 60,因为我仍然会收到速率错误。我将其设置为 50,我的测试代码现在在运行超过限制后会等待一段时间。
不过,我还没有弄清楚如何同时实现 60/60s 限制和 5000/24h 限制。