Kısa cevap: Bir Subscription, FHIR sunucusuna bu koşullara uyan kaynaklar değiştiğinde bu uç noktayı bilgilendir der. FHIR R4'te koşullar bir arama dizesidir (criteria: "Observation?patient=123&code=85354-9") ve sunucu eşleşen kaynağı bir REST hook'una, websocket'e, e-postaya veya bir FHIR mesajına gönderir. R4B ve R5'te model SubscriptionTopic etrafında yeniden oluşturuldu: sunucu bildirebileceği olayları yayınlar, istemci filtrelerle bir konuya abone olur ve bildirimler her zaman bir SubscriptionStatus kaynağıyla başlayan subscription-notification türünde bir Bundle olarak gelir. Subscriptions R5 Backport uygulama kılavuzu, R4 sunucularının yeni modeli sunmasına olanak tanır.
R4: Kriter tabanlı abonelikler
FHIR R4'te bir Abonelik (Subscription) kritere dayalıdır: istemci, Observation?code=…&patient=… gibi bir arama dizesi kriterine ve rest-hook, websocket, email, sms veya message kanalına sahip bir Abonelik kaynağı oluşturur. Sunucu, her oluşturma ve güncelleme işlemine karşı kriterleri değerlendirir ve eşleşen her kaynağı veya boş bir bildirimi uç noktaya gönderir.
{
"resourceType": "Subscription",
"status": "requested",
"reason": "Blood pressure alerts for the hypertension clinic",
"criteria": "Observation?code=http://loinc.org|85354-9&patient=Patient/123",
"channel": {
"type": "rest-hook",
"endpoint": "https://clinic.example.org/hooks/bp",
"payload": "application/fhir+json",
"header": ["Authorization: Bearer <token>"]
}
}
Sunucu, kriterleri her oluşturma ve güncelleme için değerlendirir. Bir kaynak eşleştiğinde, onu uç noktaya POST eder (veya payload atlanırsa boş bir gövde POST eder, böylece istemci kaynağı kendisi çeker). İşe yaradı, ancak üç sorun vardı: sunucular hangi kriterleri desteklediklerini söyleyemezlerdi, istemciler kaçırılan bir bildirimi sessiz bir dönemden ayırt edemezlerdi ve "bir kaynak bir aramayı eşleştirdi" ile "bir olay meydana geldi" aynı şey değildir (bir Encounter'ın sonlanması bir arama olarak ifade edilemez).
R4B ve R5: Konu tabanlı abonelikler
FHIR R4B ve R5'te abonelikler konuya dayalıdır. Sunucu, olayları (kaynak, tetikleyici -örneğin oluşturma, güncelleme, silme veya bir FHIRPath koşulu- ve izin verilen filtreler) açıklayan Abonelik Konusu (SubscriptionTopic) kaynakları yayınlar. Bir abone, filtre değerleri, kanal türü, uç nokta, kalp atışı süresi ve boş, yalnızca kimlik veya tam kaynak içerik ayarı ile bir konuya işaret eden bir Abonelik oluşturur.
SubscriptionTopic, sunucunun yayınladığı bir kaynaktır ve bir olayı tanımlar: hangi kaynak, hangi tetikleyici (oluşturma, güncelleme, silme veya %previous.status != 'finished' and %current.status = 'finished' gibi bir FHIRPath koşulu) ve bir abonenin kullanabileceği filtreler. Abone daha sonra konuya işaret eden bir Subscription oluşturur:
{
"resourceType": "Subscription",
"status": "requested",
"topic": "http://example.org/fhir/SubscriptionTopic/encounter-end",
"filterBy": [{"resourceType": "Encounter", "filterParameter": "patient", "value": "Patient/123"}],
"channelType": {"system": "http://terminology.hl7.org/CodeSystem/subscription-channel-type", "code": "rest-hook"},
"endpoint": "https://clinic.example.org/hooks/encounters",
"heartbeatPeriod": 60,
"timeout": 30,
"contentType": "application/fhir+json",
"content": "id-only"
}
content, ne kadarının gönderileceğini seçer: empty (sadece olay), id-only (referanslar, geri kalanını kendi yetkilendirmeyle çekin) veya full-resource. heartbeatPeriod, sunucunun sessizliğin tespit edilebilir olması için bir kalp atışı göndermesini sağlar.
Bir bildirim neye benzer
Bir FHIR abonelik bildirimi, subscription-notification türünde bir Paket'tir (Bundle). Bu paketin ilk girdisi, aboneliği, konuyu, bildirim türünü (el sıkışma, kalp atışı, olay bildirimi, sorgu durumu veya sorgu olayı) ve kaçırılan olayları tespit etmek için bir eventsSinceSubscriptionStart sayacını veren bir Abonelik Durumu (SubscriptionStatus) kaynağıdır. Diğer girdiler, içerik ayarlarına bağlı olarak değiştirilen kaynakları veya bunların başvurularını taşır.
Her bildirim subscription-notification türünde bir Bundle'dır. İlk girdisi, abonelik referansını, konuyu, bildirim türünü (handshake, heartbeat, event-notification, query-status, query-event) ve bir eventsSinceSubscriptionStart sayacını içeren bir SubscriptionStatus'tur; sayacındaki bir boşluk kaçırılan bir olayı ifade eder ve istemci bunu kurtarmak için $events çağırabilir. Daha sonraki girdiler, content'e bağlı olarak kaynakları veya bunların referanslarını taşır.
Kanallar: rest-hook (sunucu HTTPS uç noktanıza POST yapar), websocket (istemci bağlanır ve sokette bildirimler alır, tarayıcı uygulamaları için kullanışlıdır), email (yalnızca bildirim, veri değil), message (bir FHIR mesajlaşma Bundle'ı). R4 sms kanalı kaldırıldı.
Üretimde çalıştırma
FHIR Aboneliklerini üretimde çalıştırmak; olay numarası ve kaynak sürümüne göre anahtarlanmış, göndericiyi doğrulayan ve yükü asla yetkilendirme olarak kabul etmeyen uç nokta güvenliği, birçok olayı içeren gruplanmış paketlere karşı tolerans, ilk el sıkışma bildirime 2xx yanıtı ve birçok sunucunun hala abonelikleri hasta uygulamaları yerine arka uç hizmetleriyle sınırladığı gerçeğinin farkında olmayı gerektirir.
- Idempotency. Bildirimler bir denemeden sonra çoğaltılabilir; olay numarası ve kaynak sürümüne göre anahtar kullanın.
- Güvenlik. Uç nokta göndereni doğrulamalıdır (paylaşılan bir gizli anahtar başlığı, karşılıklı TLS veya imzalar) ve hiçbir zaman yetkilendirme olarak yüküne güvenmemelidir;
contentid-onlyise hassas verileri kendi belirtecinizle sunucudan geri alın. - Backpressure. Sunucular olayları toplu olarak işler ve
maxCount'a uyar; istemciler birçok olay içeren paketleri kabul etmelidir. - Handshake. Aktivasyon üzerine sunucu bir
handshakebildirimi gönderir ve 2xx bekler; aksi takdirde abonelikerrordurumuna geçer. - Scopes. SMART on FHIR, abonelik kapsamlarını yavaş yavaş ekledi; birçok sunucu hala abonelikleri hasta uygulamaları yerine arka uç hizmetleriyle (istemci kimlik bilgileri) sınırlar.
FHIR Abonelikleri Olmayan Webhook'lar
FHIR Abonelikleri Olmayan Webhook'lar, basit platform mekanizmalarıdır: bir HTTPS URL'si kaydeder ve herhangi bir Abonelik Konusu olmadan, kaynak yazılması veya onay değişikliği gibi imzalı JSON olayları alırsınız. Anpheros bu tür webhook'lar sunar. Tek bir platform için daha basittirler ancak genel bir FHIR istemcisi tarafından keşfedilemezler, bu nedenle herhangi bir FHIR sunucusuna karşı çalışması gereken entegrasyonlar Abonelikleri kullanır.
Anpheros dahil birçok platform, düz webhook'lar sunar: bir HTTPS URL'si kaydeder ve kaynak yazıldı, rıza değişti, belge tamamlandı gibi imzalı JSON olayları alırsınız. Aynı ihtiyacı daha az törenle ve SubscriptionTopic olmadan çözerler ve FHIR kaynakları olmadıkları için genel bir FHIR istemcisi tarafından keşfedilemezler. Entegrasyonunuz herhangi bir FHIR sunucusuna karşı çalışmak zorundaysa, Abonelikleri kullanın; tek bir platformu hedefliyorsa, webhook'ları genellikle daha basittir. Anpheros, webhook'larını geliştirici sitesinde (aşağıdaki bağlantı) belgeler.
İlgili sayfalar
- FHIR R4 vs R5
- FHIR araması açıklandı
- FHIR Bundle açıklandı
- CDS Hooks açıklandı
- FHIR ile uzaktan hasta izleme
- Anpheros webhook'ları (geliştiriciler)
Kaynaklar
- HL7 FHIR R5: Subscription
- HL7 FHIR R5: SubscriptionTopic
- HL7 FHIR R5: SubscriptionStatus ve bildirimler
- HL7 FHIR R4: Subscription
- Subscriptions R5 Backport uygulama kılavuzu
Sık sorulan sorular
R5 tarzı abonelikleri R4 sunucusunda kullanabilir miyim?
Evet, sunucu Subscriptions R5 Backport uygulama kılavuzunu uyguluyorsa, konu, filtreler ve kanal ayarlarını R4 Subscription kaynağındaki uzantılar olarak kodlar ve bildirimler için R4 Bundle'ları kullanır.
Subscription ile _lastUpdated ile yoklama arasındaki fark nedir?
Yoklama, sunucuya tekrar tekrar sorar ve hiçbir şeyi kaçırmaz ancak yavaştır ve israftır; Abonelikler olaylar gerçekleştiğinde bunları gönderir. Sağlam istemciler her ikisini birleştirir: hız için abone olun, kesinti sonrası kurtarmak için yoklama yapın veya $events çağırın.
Bildirim veriyi içeriyor mu?
Yalnızca content full-resource ise. Daha güvenli varsayılan id-only'dir: bildirim size hangi kaynağın değiştiğini söyler ve siz onu kendi yetkilendirmeyle çekersiniz.
FHIR Abonelikleri webhook'larla aynı mı?
Bir rest-hook aboneliği, FHIR tanımlı bir şekle sahip bir webhook'tur: keşfedilebilir konular, standart bildirim paketleri ve durum takibi. Bir platform tarafından sunulan düz webhook'lar yalnızca o platform için aynı işi yapar.
Sandbox'ta ücretsiz deneyin
İlk FHIR çağrınız 5 dakikada. Hasta izniyle yerleşik HL7 FHIR R4 API: sandbox'ta deneyin, ardından kendi uygulamanızı veya klinik sisteminizi bağlayın.
Ücretsiz · 30 sentetik hasta · kart gerekmez

