API สำหรับอ่านข้อมูลคุณภาพน้ำ
การกำหนดรายละเอียดของ API สำหรับอ่านข้อมูลคุณภาพน้ำ
API ID | URL | รายละเอียด |
---|---|---|
A006.1 | /WaterQuality | อ่านข้อมูลคุณภาพน้ำ ตามเงื่อนไขที่ระบุ |
คุณลักษณะ API สำหรับอ่านข้อมูลคุณภาพน้ำ
API ID: A006.1
วัตถุประสงค์: อ่านข้อมูลคุณภาพน้ำ
Status: Required (ตั้งแต่ API version 1.0 Draft 1)
Since: 1.0 Draft 1
Revision: 1.0 Draft 1
ข้อมูลทั่วไป ในการติดต่อ API สำหรับอ่านข้อมูลคุณภาพน้ำ
ข้อมูล | รายละเอียด |
---|---|
URL | /WaterQuality |
HTTP Method | GET |
Query parameter ของ API สำหรับอ่านข้อมูลคุณภาพน้ำ
ลำดับ | Parameter | Type | ความหมาย | หมายเหตุ |
---|---|---|---|---|
1 | interval | string | ประเภทความถี่ของการตรวจวัด อ้างอิงค่าตามหัวข้อ การใช้ค่า interval ในการระบุความถี่ของข้อมูลด้านน้ำจากการตรวจวัด) | required |
2 | latest | boolean | true – ดึงข้อมูลเฉพาะค่าของการตรวจวัดล่าสุด false – ดึงข้อมูลตาม startDateTime และ endDateTime |
required |
3 | startDatetime | datetime | วัน-เวลาที่ตรวจวัด (เริ่มต้น) – Inclusive | required เมื่อค่าพารามิเตอร์ latest = false |
4 | endDatetime | datetime | วัน-เวลาที่ตรวจวัด (สิ้นสุด) – Inclusive | required เมื่อค่าพารามิเตอร์ latest = false |
5 | provinceCode | string | รหัสจังหวัด (2 หลัก) ดูหัวข้อการอ้างอิงจังหวัด | optional |
6 | amphoeCode | string | รหัสอำเภอ (4 หลัก) ดูหัวข้อการอ้างอิงอำเภอ | optional |
7 | tambonCode | string | รหัสตำบล (6 หลัก) ดูหัวข้อการอ้างอิงตำบล | optional |
8 | basinCode | string | รหัสลุ่มน้ำหลัก (2 หลัก) ดูหัวข้อการอ้างอิงลุ่มน้ำหลัก/ลุ่มน้ำสาขา | optional |
9 | subBasinCode | string | รหัสลุ่มน้ำสาขา (4 หลัก) ดูหัวข้อการอ้างอิงลุ่มน้ำหลัก/ลุ่มน้ำสาขา | optional |
10 | agencyCode | string | รหัสหน่วยงาน ดูหัวข้อรหัสหน่วยงาน | optional |
หมายเหตุ
การดึงข้อมูลที่มีความถี่แตกต่างกัน ให้ทำการ call API แยกกัน
2) ข้อมูล parameter 5-10 ใช้ในการบ่งบอก filter ว่าต้องการดึงข้อมูลของแหล่งน้ำขนาดเล็กครอบคลุมพื้นที่ใดบ้าง
ตัวอย่าง HTTP Request Parameter ในการอ่านค่าแบบรายชั่วโมง
latest=false
&startDatetime=2022-05-02T23:00:00
&endDatetime=2022-05-02T23:59:59
&interval= C-60
&provinceCode=10
โครงสร้างของ Response body ข้อมูลคุณภาพน้ำ
{ "metadata": { "version": string, "dataProviderCode": string, "dataProviderName": string, "documentGenerateTime": datetime, "waterDatatype": string, "interval": string }, "timeSeriesObservation": [{ "observationMetadata": { "observeAgencyCode": string, "observeAgencyName": string, "originality": integer, "editAgencyCode": string, "editAgencyName": string }, "resultTime": datetime, "station": { "stationCode": string, "stationReference": url }, "waterResources": { "waterResourcesCode": string, "waterResourcesReference": url }, "measurementResults": [ { "instrumentPosition": { "position": string, "number": integer } "measureTime": datetime, "createTime": datetime, "updateTime": datetime, "variable": "pH", "value": decimal, "uom": string, "qualityFlag": string, "comment": string, "qualityControlLevel": string }, { "instrumentPosition": { "position": string, "number": integer } "measureTime": datetime, "createTime": datetime, "updateTime": datetime, "variable": "DissolvedOxygen", "value": decimal, "uom": string, "qualityFlag": string, "comment": string, "qualityControlLevel": string }, { "instrumentPosition": { "position": string, "number": integer } "measureTime": datetime, "createTime": datetime, "updateTime": datetime, "variable": "ElectricalConductivity", "value": decimal, "uom": string, "qualityFlag": string, "comment": string, "qualityControlLevel": string }, { "instrumentPosition": { "position": string, "number": integer } "measureTime": datetime, "createTime": datetime, "updateTime": datetime, "variable": "Temperature", "value": decimal, "uom": string, "qualityFlag": string, "comment": string, "qualityControlLevel": string }, { "instrumentPosition": { "position": string, "number": integer } "measureTime": datetime, "createTime": datetime, "updateTime": datetime, "variable": "Turbidity", "value": decimal, "uom": string, "qualityFlag": string, "comment": string, "qualityControlLevel": string }, { "instrumentPosition": { "position": string, "number": integer } "measureTime": datetime, "createTime": datetime, "updateTime": datetime, "variable": "Saliniy", "value": decimal, "uom": string, "qualityFlag": string, "comment": string, "qualityControlLevel": string } ] } ] }
หมายเหตุ
ในกรณีที่ ข้อมูลตามโครงสร้างมาตรฐานไม่ได้กำหนดเป็น Mandatory (ดูหัวข้อ โครงสร้างข้อมูลตามลำดับเวลา (Time Series)) ถ้ามีข้อมูลสามารถส่งข้อมูลนั้นๆได้ตามโครงสร้าง แต่ในกรณีที่ไม่มีข้อมูล API จะไม่ส่งข้อมูลกลับออกมา
ตัวอย่าง HTTP Response Body ของข้อมูลคุณภาพน้ำรายชั่วโมง
{ "metadata": { "version": "1.0", "dataProviderCode":"G09003", "dataProviderName":"Pollution Control Department", "documentGenerateTime":"2023-09-15T10:01:00", "waterDatatype": "A006", "interval": "C-60" }, "timeSeriesObservation": [{ "observationMetadata": { "observeAgencyCode": "G09003", "observeAgencyName": "Pollution Control Department", "originality": 1 } "resultTime": "2023-09-15T10:00:00", "Station": { "stationCode": "G09003-102", "stationReference": "/StationInfo/G09003-102" }, "measurementResults": [ { "measureTime":"2023-09-15T10:00:00", "createTime": "2023-09-15T10:00:00", "updateTime": "2023-09-15T10:00:00", "variable": "pH", "value": 7.2, "uom": "-", "qualityFlag": "U", "comment": "No Quality Control", "qualityControlLevel": "1" }, { "measureTime":"2023-09-15T10:00:00", "createTime": "2023-09-15T10:00:00", "updateTime": "2023-09-15T10:00:00", "variable": "DisolvedOxygen", "value": 4.9, "uom": "mg/L", "qualityFlag": "U", "comment": "No Quality Control", "qualityControlLevel": "1" }, { "measureTime":"2023-09-15T10:00:00", "createTime": "2023-09-15T10:00:00", "updateTime": "2023-09-15T10:00:00", "variable": "ElectricalConductivity", "value": 212.27, "uom": "us/cm", "qualityFlag": "U", "comment": "No Quality Control", "qualityControlLevel": "1" }, { "measureTime":"2023-09-15T10:00:00", "createTime": "2023-09-15T10:00:00", "updateTime": "2023-09-15T10:00:00", "variable": "temperature", "value":32.5 , "uom": "Celsius", "qualityFlag": "U", "comment": "No Quality Control", "qualityControlLevel": "1" }, { "measureTime":"2023-09-15T10:00:00", "createTime": "2023-09-15T10:00:00", "updateTime": "2023-09-15T10:00:00", "variable": "turbidity", "value":4092.3 , "uom": "NTU", "qualityFlag": "U", "comment": "No Quality Control", "qualityControlLevel": "1" }, { "measureTime":"2023-09-15T10:00:00", "createTime": "2023-09-15T10:00:00", "updateTime": "2023-09-15T10:00:00", "variable": "Salinity", "value": 0.09, "uom": "g/L", "qualityFlag": "U", "comment": "No Quality Control", "qualityControlLevel": "1" } ] } ] }
หมายเหตุ
ข้อมูลที่ใส่ในตัวอย่างเป็นข้อมูลจำลองเพื่อประกอบความเข้าใจในการทำงานของ API เท่านั้น อาจจะไม่ตรงกับการใช้งานจริง
รายละเอียดเพิ่มเติมเกี่ยวกับ API เพื่อการดึงข้อมูลผลการตรวจวัดด้านน้ำ
- การใช้งาน property “interval” ให้เป็นไปตามความเหมาะสมของข้อมูลด้านน้ำนั้นๆ เช่น ข้อมูลปริมาณฝนรายวันสามารถมีได้ทั้งแบบย้อนหลัง 24 ชม. และแบบตามคาบเวลารายวัน (7.00 น. – 7.00 น.)
- response ที่ตอบกลับจาก API server ควรมีจำนวนข้อมูลการตรวจวัดแต่ละประเภทเพียง 1 ค่าต่อ 1 slot ของคาบเวลาที่ร้องขอ เช่น หากร้องขอข้อมูลปริมาณน้ำฝนโดยกำหนด interval เป็น 15 นาที ควรมีค่าการตรวจวัดอยู่ใน slot 15 นาทีเพียง 1 ค่าเท่านั้น ทั้งนี้ เพื่อให้ API client ไม่ต้องนำข้อมูลไปทำการสรุปเพื่อให้ได้ค่าข้อมูลเพียง 1 ค่าภายใน slot ในภายหลัง
- ค่าของ “measureTime” ที่ระบุมาจาก API server กำหนดให้ใช้เป็นวัน-เวลาท้ายสุดของ slot เวลานั้นๆ เช่น ปริมาณน้ำฝนสะสม 15 นาทีของ measureTime ที่เวลา 9:00 น. คือ ปริมาณน้ำฝนสะสมในช่วงเวลา 8:45 น. จนถึง 9:00 น. เป็นต้น
- ในกรณีที่ข้อมูลที่ได้จากตรวจวัดมี interval ที่ไม่สอดคล้องกับข้อมูลที่ให้บริการ เช่น มีการตรวจวัดค่าน้ำฝนทุก 10 นาที แต่ต้องการให้บริการข้อมูลน้ำฝนรายชั่วโมง ผู้ให้บริการสามารถทำ data interpolation ได้ตามความเหมาะสมเพื่อให้ได้ข้อมูลที่สอดคล้องกับ slot ของการให้บริการข้อมูล รวมถึงทำการกำหนดค่าของ measureTime ให้สอดคล้องกับ slot เวลาที่ได้บริการข้อมูล
- การระบุค่าของ “startDateTime” และ “endDateTime” ที่เป็น filter ในการ query ข้อมูลการตรวจวัดในกรณีที่ต้องการค่าเฉพาะช่วง โดยปกติไม่ควรจะทำการกำหนดค่าเกิน 1 วันในแต่ละครั้ง เพราะอาจจะมีปริมาณข้อมูลจำนวนมากเกินไป ในการ query แต่ละครั้ง