CRUD Operations in FHIR R5
FHIR là một tiêu chuẩn RESTful, áp dụng các nguyên tắc kiến trúc REST cho dữ liệu y tế. Mỗi tài nguyên FHIR (như Patient, Observation, Medication) có một URL duy nhất và có thể được thao tác thông qua các phương thức HTTP chuẩn.
Trước khi đi sâu vào các thao tác CRUD, hãy nhớ mẫu URL cơ bản trong FHIR:
Ví dụ:
Bây giờ, hãy khám phá cách thực hiện các thao tác CRUD trong FHIR R5.
CREATE: Tạo tài nguyên mới
Phương thức POST cơ bản
Để tạo một tài nguyên mới, bạn sử dụng phương thức HTTP POST với nội dung là tài nguyên FHIR ở định dạng JSON hoặc XML:
Khi thành công, máy chủ sẽ trả về mã HTTP 201 Created và header Location chứa URL đến tài nguyên vừa tạo:
Conditional Create
FHIR R5 hỗ trợ "conditional create" - chỉ tạo tài nguyên nếu nó chưa tồn tại. Điều này giúp tránh tạo các bản sao không cần thiết:
Trong trường hợp này:
Nếu không tìm thấy bệnh nhân với MRN là 123456, máy chủ sẽ tạo mới và trả về 201 Created
Nếu đã tồn tại, máy chủ sẽ trả về 200 OK và không tạo tài nguyên mới
Tạo nhiều tài nguyên cùng lúc
Để tạo nhiều tài nguyên đồng thời, bạn có thể sử dụng Bundle với type là "transaction":
READ: Đọc tài nguyên
GET Tài nguyên đơn
Để đọc một tài nguyên, bạn sử dụng phương thức HTTP GET với URL chứa loại tài nguyên và ID:
Máy chủ sẽ trả về tài nguyên ở định dạng được yêu cầu (mặc định là JSON trong FHIR R5):
Đọc tài nguyên với _format
Bạn có thể chỉ định định dạng phản hồi bằng tham số _format
:
Đọc phiên bản cụ thể
Để đọc một phiên bản cụ thể của tài nguyên, thêm _history/[versionId]
:
Điều này sẽ trả về phiên bản 2 của tài nguyên Patient/456, ngay cả khi đã có các phiên bản mới hơn.
Conditional Read
FHIR cũng hỗ trợ "conditional read" - đọc tài nguyên dựa trên các điều kiện thay vì ID:
Nếu chỉ có một tài nguyên khớp, máy chủ sẽ trả về tài nguyên đó. Nếu có nhiều kết quả, bạn sẽ nhận được 200 OK với Bundle chứa các kết quả.
UPDATE: Cập nhật tài nguyên
PUT: Cập nhật hoàn toàn
Phương thức PUT được sử dụng để thay thế hoàn toàn một tài nguyên hiện có:
Lưu ý việc sử dụng header If-Match
với ETag để tránh cập nhật đồng thời (concurrent updates). Máy chủ sẽ trả về:
PATCH: Cập nhật một phần
FHIR R5 hỗ trợ đầy đủ phương thức PATCH để cập nhật một phần tài nguyên. Có hai định dạng chính:
1. JSON Patch
2. FHIRPath Patch (Mới trong R5)
FHIRPath Patch mới trong R5 mạnh mẽ hơn, cho phép các biểu thức phức tạp.
Conditional Update
Tương tự như conditional create, FHIR hỗ trợ conditional update:
Nếu tìm thấy một tài nguyên khớp, nó sẽ được cập nhật
Nếu không tìm thấy, một tài nguyên mới sẽ được tạo (tương tự upsert)
Nếu tìm thấy nhiều tài nguyên khớp, máy chủ sẽ trả về lỗi 412 Precondition Failed
DELETE: Xóa tài nguyên
Xóa cơ bản
Để xóa một tài nguyên, sử dụng phương thức HTTP DELETE:
Máy chủ sẽ trả về:
Lưu ý rằng trong FHIR, "xóa" thường chỉ đánh dấu tài nguyên là không hoạt động, không thực sự xóa nó khỏi hệ thống. Điều này phù hợp với các yêu cầu pháp lý về lưu trữ hồ sơ y tế.
Conditional Delete
Bạn có thể xóa các tài nguyên dựa trên điều kiện:
Để tránh xóa quá nhiều tài nguyên do lỗi, FHIR có cơ chế bảo vệ:
Ở đây, chỉ tối đa 100 tài nguyên sẽ bị xóa.
Versioning, History và _history Parameter
Versioning trong FHIR
FHIR lưu trữ lịch sử các phiên bản của mỗi tài nguyên. Mỗi khi tài nguyên được cập nhật, một phiên bản mới được tạo ra. Thông tin phiên bản được lưu trong phần tử meta
:
Truy cập History của tài nguyên
Để xem lịch sử của một tài nguyên:
Phản hồi sẽ là một Bundle chứa tất cả các phiên bản của tài nguyên:
Lọc History
Bạn có thể lọc lịch sử bằng các tham số:
Truy vấn này chỉ trả về các phiên bản được tạo từ ngày 21/03/2023.
History toàn bộ hệ thống
FHIR cũng cho phép truy cập lịch sử của tất cả tài nguyên trong hệ thống:
Hoặc lịch sử của tất cả tài nguyên của một loại cụ thể:
Các tham số History
Một số tham số hữu ích cho việc truy vấn lịch sử:
_since
: Chỉ trả về các phiên bản sau một thời điểm_count
: Giới hạn số lượng kết quả trả về_at
: Tìm các phiên bản tại một thời điểm cụ thể (R5)_list
: Chỉ trả về các tài nguyên trong một danh sách cụ thể
Ví dụ thực tế: Quy trình CRUD hoàn chỉnh
Hãy xem một ví dụ thực tế về quy trình CRUD hoàn chỉnh cho một bệnh nhân:
1. Tạo bệnh nhân mới
Phản hồi:
2. Đọc thông tin bệnh nhân
3. Cập nhật địa chỉ và số điện thoại
Phản hồi:
4. Xem lịch sử bệnh nhân
5. Xóa bệnh nhân
Phản hồi:
Các tính năng CRUD nâng cao trong R5
FHIR R5 đã giới thiệu một số tính năng CRUD nâng cao:
1. Patch với sâu hơn
R5 cải thiện đáng kể khả năng PATCH với FHIRPath, cho phép các biểu thức phức tạp:
2. Các bản cập nhật có điều kiện nâng cao
R5 mở rộng khả năng cập nhật có điều kiện với nhiều tiêu chí phức tạp hơn.
3. _purge Operation
R5 giới thiệu operation _purge
để hoàn toàn xóa một tài nguyên khi được phép:
Lưu ý rằng đây là một thao tác nguy hiểm và thường chỉ được thực hiện bởi người dùng có quyền đặc biệt.
4. _cascade Parameter cho DELETE
R5 giới thiệu tham số _cascade
cho DELETE để kiểm soát cách xử lý các tài nguyên liên quan:
Các tùy chọn bao gồm:
none
: Chỉ xóa tài nguyên chính (mặc định)delete
: Xóa tài nguyên chính và các tài nguyên trực tiếp phụ thuộcresource
: Xóa tài nguyên, giữ nguyên các tài nguyên liên quan
Kết luận
CRUD Operations trong FHIR R5 cung cấp một bộ công cụ mạnh mẽ và linh hoạt để tương tác với dữ liệu y tế. Từ các thao tác cơ bản đến các tính năng nâng cao như conditional updates, PATCH phức tạp và quản lý phiên bản, FHIR R5 đã đáp ứng các yêu cầu khắt khe của các hệ thống y tế hiện đại.
Khi triển khai FHIR, việc nắm vững các thao tác CRUD này là nền tảng để xây dựng các ứng dụng y tế hiệu quả, an toàn và có thể mở rộng.
Tài liệu tham khảo
Last updated