Manipulating FHIR Resource: CRUD Operation
จัดการ FHIR Resource: CRUD Operation
REST
REST หรือ REpresentational State Transfer เป็น protocol ที่สร้างขึ้นมาบน HTTP (HyperText Transfer Protocol) ซึ่งเป็น request/response protocol
REST ใช้แนวคิดในแง่ของ Resource แต่ละ resource สามารถระบุ identity ได้โดย Uniform Resource Identifier (URI) และระบุตำแหน่งของ resource โดยไม่ซ้ำกัน และจำเพาะเจาะจงกับ server ที่ใช้งาน
CRUD: Create, Read, Update and Delete
Method ต่างๆ ที่ใช้จัดการกับ resource
- POST สร้าง resource ที่ต้องการขึ้นใหม่ (Create), server จะกำหนด id ให้, id รวมกับที่อยู่ของ server จะกลายเป็น URI ของ resource นั้น
- GET (Read) ดึงข้อมูล resource ที่ต้องการตาม URI (server + id) ที่ระบุ, FHIR ใช้ GET method ทั้งในการดึงข้อมูล resource เดียวและในการค้นหาซึ่งอาจจะได้ ผลลัพธ์เป็นจำนวนหลาย resource กลับมา
- PUT (Update) ใช้ปรับปรุงข้อมูล resource ที่มีอยู่แล้ว จึงจำเป็นต้องรู้ URI ของ resource นั้น, ใน FHIR นั้น PUT method จะสร้าง version ใหม่ของ resource นั้นขึ้นมา
- DELETE (Remove) ใช้ลบ resource จาก URI ที่ระบุ แต่ยังเข้าถึงสำเนาของ resource นั้นได้ จาก history
(OPTIONS เป็น method พิเศษใน FHIR ซึ่งให้ผลลัพธ์เป็น Conformance resource ที่บอกถึงความสามารถหรือ capabilities ของ server นั้น)
Headers
- Content-type header ระบุว่าเนื้อหาข้อมูลของ resource อยู่ในรูปแบบ XML หรือ JSON
- Location header ใช้แจ้ง client ระบุ URI ของ resource ที่เพิ่งสร้างขึ้นใหม่
- Accept header ใช้แจ้ง server ถึงรูปแบบข้อมูล (XML/JSON) ที่ client ต้องการ เมื่อ client เรียกข้อมูลจาก server โดยใช้ GET method
ในที่นี้จะใช้แอป Postman สำหรับรับ-ส่ง HTTP requests เพื่อระบุ content, HTTP method, request header และดู response header, Status code และ response body ที่ server ส่งกลับมา
รายชื่อ FHIR Test Server ที่เปิดสาธารณะ (public)
ในตอนแรกนี้จะใช้ http://test.fhir.org/r4 เป็น Test Server
สร้าง Resource ใหม่ (Create)
ลองส่ง Patient resource ที่ต้องการสร้างไปที่ FHIR server โดยใช้ POST method ส่ง request ไปที่ FHIR Test Server
ตัวอย่าง Patient Resource ที่จะส่งไปสร้างขึ้นใหม่บน server
<?xml version="1.0" encoding="UTF-8"?>
<Patient xmlns="http://hl7.org/fhir">
<text>
<status value="generated"/>
<div xmlns="http://www.w3.org/1999/xhtml">John Melonseed</div>
</text>
<identifier>
<system value="http://clinfhir.com/fhir/NamingSystem/identifier"/>
<value value="1234567890"/>
</identifier>
<name>
<use value="official"/>
<text value="John Melonseed"/>
<family value="Melonseed"/>
<given value="John"/>
<prefix value="Mr."/>
</name>
<telecom>
<system value="phone"/>
<value value="(08) 9765 4321"/>
<use value="mobile"/>
</telecom>
<gender value="male"/>
<birthDate value="2000-01-01"/>
<address>
<use value="home"/>
<type value="both"/>
<text value="88/20 Tiwanon Road, Talad Kwan, Muang, Nonthaburi, 11000, TH"/>
<line value="88/20 Tiwanon Road"/>
<city value="Talad Kwan"/>
<district value="Muang"/>
<state value="Nonthaburi"/>
<postalCode value="11000"/>
<country value="TH"/>
</address>
</Patient>
รายละเอียดของแต่ละ element และ Data type ที่เกี่ยวข้องใน Patient resource ดูรายละเอียดได้จาก http://hl7.org/fhir/patient.html#resource
- identifier: Identifier ตามแต่ละ system ที่ใช้งานในแต่ละแห่ง เช่น เลขประจำตัวประชาชน เลขประกันสังคม หมายเลขใบอนุญาตขับรถ ตัวอย่าง เช่น http://hl7.org/fhir/identifier-registry.html#4.6
- name: HumanName ระบุชื่อ ชื่อสกุล คำนำหน้า และอื่นๆ ตาม http://hl7.org/fhir/datatypes.html#humanname
- telecom: ContactPoint ระบุรายละเอียด รูปแบบและชนิดของ ContactPoint ตาม http://hl7.org/fhir/datatypes.html#contactpoint
- address: Address ที่อยู่ ตาม http://hl7.org/fhir/datatypes.html#address
ระบุ Content-type ใน Headers ให้ตรงกับรูปแบบข้อมูลที่จะส่งไป ในที่นี้ คือ application/fhir+xml
ในส่วนของ Body วางเนื้อหาของ resource ที่จะส่ง ระบุ server ที่ต้องการส่งข้อมูล (http://test.fhir.org/r4/Patient) ตั้ง method เป็น POST แล้วกด Send
รอ server ประมวลผล request ที่ส่งไป และส่ง response กลับมา Status code = 201 หมายถึง สร้าง resource สำเร็จ
สังเกตเลข ID ที่ถูก assigned ให้กับ resource ที่สร้างใหม่นี้ ใน Headers ของ response ที่ server ส่งกลับมา
ID นี้จะถูกสร้างขึ้นใหม่ตามระบบของ server ที่ส่ง request ไปใช้งาน เปรียบได้กับ HN ที่ได้ขึ้นมาใหม่หลังจากลงทะเบียนผู้ป่วยใหม่ในระบบโรงพยาบาล
Resource นี้ มี _history/1 เนื่องจากเป็น version แรกของ resource นี้
เลข ID นี้ รวมกับที่อยู่ของ server คือ URI ที่ใช้ในการ GET (Read) และ method อื่นๆ กับ resource นี้ต่อไป