【问题标题】:Fhir client against hapi server never returns more than 2000 records针对 hapi 服务器的 Fhir 客户端从不返回超过 2000 条记录
【发布时间】:2019-10-09 12:36:54
【问题描述】:

我正在针对 Smile (hapi) CDR Fhir 服务器使用 .NET Fhir 客户端。我有 3235 名患者正在尝试使用下面的代码检索,但从未超过 2000 名。我尝试使用而不使用 no-cache 选项添加标题。我知道服务器有更多记录,因为我发出了Patient/?_summary=count,它给出了我期望的记录总数(3235)。

我禁用了服务器缓存,刷新了索引,但总是得到正好 2000 条记录。我还尝试了使用 Get() 和 Search() 方法来检索患者的不同方法,但都得出了相同的结果。谁能建议另一种方法来让正确数量的患者返回或提示我可能做错了什么?

var patients = new List<Patient>();
var bundle = (Bundle)client.Get("Patient");
while (bundle != null)
{
    patients.AddRange(bundle.Entry.Select(e => e.Resource as Patient));
    bundle = client.Continue(bundle);
}

我已尝试使用包含缓存控制标头的几种变体,但计数保持不变。

client.OnBeforeRequest += (object sender, BeforeRequestEventArgs e) =>
{
    e.RawRequest.Headers.Clear();
    e.RawRequest.Headers.Add("Accept", "application/fhir+json;fhirVersion=4.0");
    e.RawRequest.Headers.Add("Cache-Control", "no-cache");
};

【问题讨论】:

    标签: hl7-fhir hapi-fhir


    【解决方案1】:

    无论客户端请求多少条记录,服务器都有权对它在一次调用中返回的数据施加上限。检索更多数据的唯一方法是使用 FHIR 规范中定义的“下一个”链接对其进行分页。

    【讨论】:

    • 请注意,如果您是运行服务器的人,则应该有一个配置参数可让您根据客户的预期需求和硬件处理预期负载的能力调整此限制。
    • 上面代码中的client.Continue语句是分页到下一个结果的方法。因此,如果循环在 2000 名患者之后终止,而应该有更多,这似乎是服务器错误,而不是页面大小限制的结果。
    • 是的,服务器默认为每页 50 页,最多 250 页(这比我预期的要少得多)。正如@MirjamBaltus 指出的那样,我正在翻页,所以仍然想知道限制来自哪里。
    • @Geekn:限制不是来自 FhirClient,它只是使用 Bundle 中的“下一个”链接来检索结果。要退出循环,最后查看的 Bundle 将没有那个。您可以尝试使用 Postman 或 curl 检索倒数第二个 Bundle,然后手动翻页。如果服务器有限制,那将很快停止。如果没有,并且您不断获得带有“下一个”链接的捆绑包,这可能意味着限制是在中间的某个地方完成的。或者您可以询问 SmileCDR 他们是否施加了这样的限制。
    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多