Reference · FHIR R4 · REST API

REST, search, dan Bundle

Ringkasan satu halaman. Dari Lesson 0008, 0009, 0010, 0011. JSON: application/fhir+json.

Interaksi [1]

InteractionRequestSuksesGagal umum
readGET [base]/[type]/[id]200404 tidak dikenal · 410 dihapus
vreadGET [base]/[type]/[id]/_history/[vid]200404
createPOST [base]/[type]201 + Location: …/[id]/_history/[vid]400 · 422
updatePUT [base]/[type]/[id]200 (atau 201 bila update-as-create)400 · 409/412 · 422
patchPATCH [base]/[type]/[id]200JSON Patch / FHIRPath Patch
deleteDELETE [base]/[type]/[id]200 / 204—
searchGET [base]/[type]?… · POST [base]/[type]/_search200 + Bundle searchset400
historyGET [base]/[type]/[id]/_history200 + Bundle history—
capabilitiesGET [base]/metadataCapabilityStatement—
batch/transactionPOST [base]200 + batch-response/transaction-responsetransaction: 4xx/5xx + OperationOutcome

Server menentukan id saat create (id di body diabaikan). Error → body OperationOutcome. Prefer: return=minimal | representation.

Search [2]

TipeSintaksModifier / catatan
stringfamily=santdefault awalan, case/accent-insensitive · :exact · :contains
tokencode=http://loinc.org|29463-7[system]|[code] · :not · :text
referencepatient=123 · subject=Patient/123dasar chaining dan _include
datedate=ge2024-01-01prefix eq(default) ne gt lt ge le sa eb ap
semuagender:missing=truetrue = tidak punya nilai · false = punya nilai

Chaining vs include [2]

ContohEfek
Chaining (filter)DiagnosticReport?subject:Patient.name=peterhanya DiagnosticReport yang subject-nya Patient bernama peter
_include (tambah, maju)Observation?patient=123&_include=Observation:patient+ Patient yang dirujuk hasil
_revinclude (tambah, balik)Patient?_id=123&_revinclude=Observation:patient+ Observation yang merujuk hasil

Format: [tipe sumber]:[search param](:[tipe target]); berantai hanya dengan :iterate. Chaining terbalik: _has (dukungan terbatas).

Bundle [3] [4]

typeUntukYang perlu diingat
searchsethasil searchtotal = jumlah match semua halaman · entry.search.mode = match | include | outcome · link self/next (opaque, ikuti saja)
transactiontulis atomiksemua sukses atau semua gagal · referensi antar-entry lewat fullUrl: urn:uuid:… · urutan proses: DELETE → POST → PUT/PATCH → GET/HEAD
batchaksi independenrespons per entry, sebagian boleh gagal · tanpa ketergantungan antar-entry
historyhasil _historydaftar versi
collection, document, messagepaket / dokumen / pesanbukan interaksi REST di lesson ini

Entry transaction/batch: resource + request: { method, url, ifNoneExist?, ifMatch? }; respons: entry.response.

Conditional + versioning [1]

Request0 cocok1 cocok> 1 cocok
Conditional create: POST + If-None-Exist: identifier=sys|valcreate (201)abaikan, 200412
Conditional update: PUT [base]/Patient?identifier=sys|valcreateupdate resource itu412
GET  /Patient/123             → ETag: W/"3"        (= meta.versionId)
PUT  /Patient/123  If-Match: W/"3"
     → 200 bila versi masih 3 · 412 Precondition Failed bila sudah berubah (lost update dicegah)

Error + discovery [5] [6]

Jawaban 60–90 detik

"Observation milik pasien beserta Patient-nya": Observation?patient=123&code=http://loinc.org|29463-7&_include=Observation:patient, hasil Bundle searchset, bedakan lewat search.mode, paging dengan link next. Transaction vs batch: atomik vs independen, urn:uuid hanya di transaction. Lost update: ETag = versionId, kirim If-Match, tangani 412. Error selalu OperationOutcome; kemampuan server di /metadata.

Sumber (FHIR R4 4.0.1): [1] RESTful API · [2] Search · [3] Bundle · [4] BundleType · [5] OperationOutcome · [6] CapabilityStatement