จัดเก็บข้อมูลบนเว็บเซิร์ฟเวอร์ IoT โดยใช้คำขอ HTTP POST

จัดเก็บข้อมูลบนเว็บเซิร์ฟเวอร์ IoT โดยใช้คำขอ HTTP POST

จัดเก็บข้อมูลบนเว็บเซิร์ฟเวอร์ IoT โดยใช้คำขอ HTTP POST

เว็บเซิร์ฟเวอร์ IoTHTTP POST IoT เว็บเซิร์ฟเวอร์ฐานข้อมูล MySQL เว็บเซิร์ฟเวอร์ IoTเว็บเซิร์ฟเวอร์ IoT ภาษา PHP

ตามที่อธิบายไว้ในบทความแรกของซีรีส์ จัดเก็บข้อมูลที่ได้รับจากอุปกรณ์ Internet of Thingsแม้ว่าข้อมูลที่บันทึกไว้จะจบลงที่เซิร์ฟเวอร์ก็ตาม MySQL o MariaDB และใช้ภาษา PHP เพื่อจัดการข้อมูลเหล่านี้ที่อินพุตและเอาต์พุต การไหลของข้อมูลระหว่างอุปกรณ์อิเล็กทรอนิกส์และฐานข้อมูลเกิดขึ้นโดยใช้ เว็บเซอร์ด กับคนที่คุณติดต่อสื่อสารตาม โปรโตคอล HTTP.

ในตอนต้นของคำจำกัดความของ โปรโตคอล HTTP มีการใช้งานที่เทียบเคียงได้กับที่อธิบายไว้ แต่ความจริงก็คือ สุดท้ายก็ยังไม่ถูกใช้ประโยชน์อย่างเต็มที่ด้วยเหตุผลหลายประการ ส่วนหนึ่งคือความปลอดภัย และส่วนหนึ่งเป็นเพราะไม่เคยมีความก้าวหน้าในการกำหนดโปรโตคอลที่เฉพาะเจาะจงหรือมีประสิทธิภาพมากขึ้น ดังนั้น ในปัจจุบันนี้โดยเฉพาะ ในเซิร์ฟเวอร์สาธารณะ สิ่งที่พบบ่อยที่สุดคือการใช้การเชื่อมต่อ HTTP อะไรที่ทำให้ คำขอโพสต์ ไปยังเซิร์ฟเวอร์เพื่อเก็บข้อมูลหรือ GET เพื่อกู้คืน โดยปกติแล้วจะแสดงหน้าเว็บที่นำเสนอและแม้แต่ที่คุณสามารถโต้ตอบได้

ข้อความพื้นฐานที่สุดที่ส่งไปยังเซิร์ฟเวอร์ในคำขอ HTTP POST รวมบรรทัดที่มีประเภทของคำขอ (POST) เส้นทางไปยังหน้าเว็บที่จะเก็บข้อมูลและเวอร์ชันของ โปรโตคอล HTTP; อีกบรรทัดหนึ่งที่มีชื่อโฮสต์ (ซึ่งอนุญาตให้เซิร์ฟเวอร์เสมือนบนเซิร์ฟเวอร์เดียวกันและ/หรือบนที่อยู่ IP เดียวกัน) และสุดท้ายอีกบรรทัดหนึ่งประกอบด้วยข้อมูลที่บันทึกไว้ แยกจากกันด้วยเครื่องหมาย & และจากบรรทัดก่อนหน้าทีละบรรทัด ว่างเปล่า.

ในตัวอย่างด้านบน เซิร์ฟเวอร์ชื่อ polaridad.es จะมีเพจใน /iot/grabar_temperatura เพื่อจัดการข้อมูลโดยใช้เวอร์ชัน 1.1 ของ โปรโตคอล HTTP

จะเห็นได้ว่ามีการใช้เครื่องหมาย & สองอันซึ่งแสดงว่ามีการจัดเก็บสามฟิลด์ ชื่อของฟิลด์ต่างๆ จะอยู่ทางด้านซ้ายของเครื่องหมายเท่ากับ และใช้ตัวอักษรเพียงสองตัวเท่านั้นในการกำหนดฟิลด์เหล่านั้น เป็นชื่อของฟิลด์ (หรือตัวแปร หากคุณต้องการ) ของคำขอ HTTP ไม่เกี่ยวข้องกับข้อมูลในฐานข้อมูล ไม่สำคัญอย่างยิ่งที่จะใช้ข้อความอธิบายและมักจะเลือกชื่อย่อ (ช่องที่มีเลขคู่) เพื่อบันทึกข้อความในการสื่อสารกับเซิร์ฟเวอร์และเร่งกระบวนการส่งข้อมูลให้เร็วขึ้น

ข้อมูลที่อุปกรณ์ IoT ปกติส่งไปยังเซิร์ฟเวอร์จะเป็นประเภทตัวเลข ซึ่งส่วนใหญ่เป็นจำนวนเต็มและทศนิยมธรรมดา เมื่อค่าถูกส่งในรูปแบบข้อความ เช่นเดียวกับกรณีที่มีตัวแปร "ne" ในตัวอย่าง สถานการณ์ที่ไม่พึงประสงค์อาจเกิดขึ้นซึ่งสามารถแก้ไขได้ ขึ้นอยู่กับแต่ละกรณี โดยประสบความสำเร็จและง่ายดายไม่มากก็น้อย ในโอกาสนี้ เครื่องหมายบวก (+) ใช้เพื่อแยกคำ โดยแทนที่ช่องว่างที่อาจจะทำให้คำเปลี่ยนแปลงไป คำขอโพสต์. วิธีทั่วไปในการส่งข้อมูลที่แก้ไขกรณีส่วนใหญ่คือการระบุรหัสเลขฐานสิบหกของอักขระ นำหน้าด้วยเครื่องหมายเปอร์เซ็นต์ (%) ตามหลักเหตุผล ไม่แนะนำให้ใช้ทรัพยากรนี้ ยกเว้นเมื่อสิ่งที่เข้ารหัสนั้นมีปัญหาเนื่องจาก ความยาวของสิ่งที่ ถูกส่งเพิ่มขึ้น ซึ่งโดยทั่วไปต้องใช้ทรัพยากรมากขึ้น แม้ว่าจะมีขนาดเล็กมากก็ตาม

แม้ว่าจะสามารถดำเนินการได้ก็ตาม เว็บเซอร์ด สำหรับ Internet of Things เฉพาะข้อมูลจากตัวอย่างก่อนหน้านี้เซิร์ฟเวอร์จำนวนมากโดยเฉพาะเซิร์ฟเวอร์สาธารณะให้เพิ่มข้อมูลอื่น ๆ ลงในแบบสอบถาม POST (น่าเสียดายที่ไม่ได้จำกัดอยู่เพียงโปรโตคอลเสมอไป) ตัวอย่างด้านล่างสอดคล้องกับคำขอโพสต์ที่ร้องขอโดย well - เซิร์ฟเวอร์ที่รู้จัก สาธารณะสำหรับอินเทอร์เน็ตของสิ่งต่าง ๆ ธิงสปีค.

นอกเหนือจากข้อมูลส่วนบุคคลบางอย่าง เช่น X-THINGSPEAKAPIKEY (และซึ่งสอดคล้องกับตัวระบุของลูกค้าแต่ละราย) ในตัวอย่างก่อนหน้านี้ คุณจะเห็นว่ายังมีส่วนหัวอื่นที่เพิ่มข้อมูลเพิ่มเติมให้กับคำขอ

วิธีใช้ส่วนหัวในไฟล์ คำขอโพสต์ เพียงประกอบด้วยการเขียนชื่อ เครื่องหมายโคลอน (:) ช่องว่าง และค่าที่คุณต้องการกำหนด

เพื่อทดสอบคำขอ POST ไปยังเว็บเซิร์ฟเวอร์ก่อนที่จะเสร็จสิ้นการกำหนดค่าส่วนประกอบอื่นๆ คุณสามารถสร้างการเชื่อมต่อกับเซิร์ฟเวอร์และส่งข้อมูลด้วยตนเองได้ ตัวอย่างเช่น บนคอมพิวเตอร์ Linux ก็เพียงพอแล้วที่จะใช้ telnet polaridad.es 80 โดยที่ polaridad.es คือชื่อของเซิร์ฟเวอร์ และ 80 คือหมายเลขพอร์ตที่บริการตอบสนอง HTTP.

เชื่อมต่อกับเว็บเซิร์ฟเวอร์ polaridad.es โดยใช้ telnet เพื่อจัดเก็บข้อมูล IoT

เครื่องมือข้ามแพลตฟอร์มสามารถใช้บน Linux, Windows หรือ OS ฉาบซึ่งถูกพูดถึงในบทความ ควบคุมอุปกรณ์อนุกรม UART จากคอมพิวเตอร์เพื่อทำการเชื่อมต่อโดยไม่ต้องใช้คอนโซล

เชื่อมต่อกับเว็บเซิร์ฟเวอร์ polaridad.es โดยใช้ PuTTY เพื่อจัดเก็บข้อมูล IoT

ในครั้งต่อไป รายการส่วนหัว HTTP มีส่วนใหญ่ที่สามารถเป็นประโยชน์สำหรับ คำขอโพสต์ มี เว็บเซอร์ด สำหรับอินเทอร์เน็ตของสิ่งต่าง ๆ

  • Accept ใช้เพื่อระบุประเภท MIME ว่าคำขอคาดหวังว่าเซิร์ฟเวอร์จะใช้ในการตอบกลับ มันแสดงออกมาเป็น tipo/subtipo ซึ่งสามารถสรุปได้โดยใช้เครื่องหมายดอกจัน (*) เป็นเครื่องหมายตัวแทน เช่น */* เพื่ออ้างถึงใด ๆ หรือ tipo/* เพื่ออ้างถึงประเภทย่อยทั้งหมดของ tipo

    ที่ใช้กันมากที่สุดคือ:

    • text/plain แม้ว่าจะเป็นพื้นฐานที่สุด แต่ก็ถูกใช้มากที่สุดเช่นกัน คาดหวังให้เซิร์ฟเวอร์ส่งคืนข้อความตอบกลับธรรมดา (ธรรมดา) ที่เพียงพอที่จะแจ้งว่าธุรกรรมนั้นถูกต้อง และส่วนใหญ่เพิ่มข้อมูลเสริม เช่น หมายเลขคำสั่งซื้อของข้อมูลที่บันทึกไว้ ผลลัพธ์ของการเปรียบเทียบ วันที่ของ เซิร์ฟเวอร์...

    • application/xml o text/xml รอให้เซิร์ฟเวอร์ตอบสนองต่อคำขอในรูปแบบ XML. ความหมายของการเลือก text แทนที่ application ช่วยให้อ่าน "มนุษย์" (เทียบกับ "อัตโนมัติ") ได้ง่ายขึ้น ความเป็นคู่นี้จะปรากฏในผู้อื่น ประเภทไมม์ แต่แนวโน้มในอนาคตของมาตรฐานคือการชอบ application ด้านหน้าของ text รูปแบบ XML ช่วยให้การตอบสนองที่มีข้อมูลจำนวนมากมีโครงสร้างที่มั่นคงมาก ข้อเสียคือ จะเพิ่มความสามารถพิเศษให้กับข้อมูลเน็ตจำนวนมาก ซึ่งทำให้การตอบสนองกินเวลาเกินความจำเป็น จึงต้องใช้แบนด์วิธมากขึ้นและอาจจะมากกว่านั้น หน่วยความจำในอุปกรณ์ IoT เพื่อประมวลผล

    • text/html ใช้เมื่อมีการตอบกลับของเซิร์ฟเวอร์ HTML เข้ารหัสเป็นข้อความธรรมดา (ข้อความธรรมดา) โดยปกติจะจัดรูปแบบการตอบกลับ เนื่องจากเป็นเรื่องเกี่ยวกับการจัดเก็บข้อมูลและการตอบสนองจะไปถึงอุปกรณ์ขนาดเล็กที่ไม่มีทรัพยากรมากมาย การใช้ประเภทนี้จึงไม่เป็นเรื่องปกติ

    • application/xhtml+xml โดยพื้นฐานแล้วมันเป็นเวอร์ชัน XHTML (HTML ในขณะที่ XML ถูกต้อง) ของข้อมูลในส่วนก่อนหน้า

    • application/json มีการใช้มากที่สุดเมื่อการตอบสนองของเซิร์ฟเวอร์มีข้อมูลหลายรายการ รวมถึงโครงสร้างที่ซับซ้อนไม่มากก็น้อย รูปแบบ JSON แบ่งปันด้วยรูปแบบ XML โครงสร้างที่มั่นคงและเพิ่มข้อดีของการกระชับในข้อความที่เพิ่มโดยโครงสร้าง

  • Accept-Charset กำหนดการเข้ารหัสข้อความที่ร้องขอเพื่อใช้ในการตอบกลับ ในการเข้ารหัสอักขระละติน UTF-8,สมบูรณ์ที่สุด, ISO-8859 15ซึ่งรวมถึงเครื่องหมายยูโร (€) และ ISO-8859 1ซึ่งเป็นพื้นฐานที่สุด

  • Accept-Encoding ระบุรูปแบบตามที่สามารถเข้ารหัสการตอบสนองของเซิร์ฟเวอร์ได้ โดยทั่วไปจะทำหน้าที่ระบุประเภทของการบีบอัด บางส่วนที่พบบ่อยที่สุดคือ gzip deflate (ซึ่งสามารถระบุรายละเอียดเพิ่มเติมได้ด้วย deflate-raw o deflate-http) ไม่ใช่เรื่องปกติที่จะใช้ในอุปกรณ์ขนาดเล็กที่เชื่อมต่อกับ Internet of Things เนื่องจากต้องใช้ทรัพยากรบางอย่าง (หน่วยความจำและเวลาประมวลผล) ซึ่งมักมีน้อยในอุปกรณ์ประเภทนี้ ไม่จำเป็นต้องระบุว่าไม่ได้ใช้การบีบอัดด้วย Accept-Encoding: identity เนื่องจากพฤติการณ์ดังกล่าวถือเป็นค่าเริ่มต้น

  • Accept-Language เป็นการแสดงออกถึงภาษาที่สามารถนำมาใช้ในการตอบได้ ตัวอย่างเช่น ภาษาสเปนของสเปนจะถูกระบุเป็น es-ES หรือภาษาอังกฤษของประเทศสหรัฐอเมริกาเป็น en-US

  • Connection ใช้เพื่อระบุสิ่งที่ควรทำกับการเชื่อมต่อที่สร้างขึ้นระหว่างไคลเอนต์ (อุปกรณ์ IoT) และ เว็บเซอร์ด เมื่อได้รับข้อมูลแล้ว โดยทั่วไปจะใช้กับค่า close ในรูปแบบ Connection: close เพื่อระบุว่าควรปิดการเชื่อมต่อหลังจากตอบกลับไคลเอนต์

  • Content-Length ช่วยให้คุณสามารถระบุจำนวนไบต์ที่ถูกครอบครองโดยส่วนของคำขอที่มีข้อมูล ซึ่งเป็นที่อยู่หลังส่วนหัวและคั่นด้วยบรรทัดว่าง มันมีประโยชน์มากเพราะทำหน้าที่ตรวจสอบความสมบูรณ์ของข้อมูลที่ส่งไป หากไม่ได้วัดสิ่งที่ประกาศไว้จะไม่เก็บไว้เนื่องจากถือว่าได้มาอย่างไม่ถูกต้อง โดยปกติแล้วเซิร์ฟเวอร์ IoT สาธารณะส่วนใหญ่ต้องการสิ่งนี้

  • Content-Type มันทำหน้าที่เพื่อบ่งบอกถึง ประเภท MIME ซึ่งข้อมูลที่ส่งไปยังเซิร์ฟเวอร์จะถูกเข้ารหัส โดยทั่วไปจะใช้ประเภท text/html เมื่อข้อมูลที่ส่งไปยังเซิร์ฟเวอร์แสดงเป็นรายการค่าอย่างง่าย (เช่น a=3.6&b=4.8) และ application/jsonrequest (ซึ่งจะเทียบเท่ากับประเภท application/json ที่กำลังพูดถึงอยู่ใน Accept) เมื่อจำเป็นต้องมีโครงสร้างที่ซับซ้อนมากขึ้น แต่สามารถส่งสิ่งต่อไปนี้ได้ รายการประเภท MIME.

  • Cookie ใช้เพื่อเพิ่มตัวระบุเซสชันเพื่อรักษาห่วงโซ่การถ่ายโอน (แบบสอบถาม การตอบสนอง แบบสอบถาม...) ที่ซับซ้อนมากกว่าคำขอเดียวที่จะส่งข้อมูลที่เกี่ยวข้องบางอย่าง แต่ได้รับในเวลาต่างกัน

  • สารบัญ
    • Referer URL ที่เป็นต้นตอของคำขอ POST เช่น หน้าเว็บที่ส่งคำขอดังกล่าว ในกรณีที่ใช้สำหรับ IoT จะไม่เพิ่มข้อมูลที่เกี่ยวข้องเนื่องจากข้อมูลจะถูกส่งโดยตรงโดยไม่มีหน้าก่อนหน้าจึงไม่ค่อยได้ใช้

    • User-Agent รายงานอุปกรณ์ที่ทำการร้องขอ ในการเข้าชมเว็บปกติ เบราว์เซอร์ที่ใช้ใน Internet of Things ช่วยให้เซิร์ฟเวอร์สามารถระบุประเภทของอุปกรณ์อิเล็กทรอนิกส์ที่ส่งคำขอได้ การระบุตัวเองไปยังเซิร์ฟเวอร์ช่วยให้การตอบสนองมีรูปแบบที่แตกต่างกันในแต่ละกรณี เช่น การส่งคืนหน้าเว็บที่ซับซ้อนไปยังเบราว์เซอร์ และข้อมูลคำเตือนเล็กน้อยไปยังอุปกรณ์ IoT ขนาดเล็ก

    คุณสามารถระบุรายการตัวเลือกที่คั่นด้วยเครื่องหมายจุลภาคแทนค่าเดียวในส่วนหัวเพื่อระบุว่ารองรับค่าที่แตกต่างกันหลายค่าพร้อมกัน ค่าเหล่านี้สามารถมีลำดับความสำคัญที่แสดงตามค่าสัมประสิทธิ์คุณภาพ q สำหรับแต่ละค่า ค่าสัมประสิทธิ์คุณภาพคั่นด้วยเครื่องหมายอัฒภาค (;) และอาจใช้เครื่องหมายดอกจัน (*) เพื่ออ้างถึงประเภทหรือประเภทย่อยใดๆ ก็ได้

    Accept: text/plain,text/xml,application/json;q=0.8,text/*;q=0.9,application/json

    ในตัวอย่างก่อนหน้านี้ ลำดับความสำคัญของรูปแบบ JSON ที่ใหญ่ที่สุด (0.9) คือข้อความธรรมดาและข้อความที่จัดรูปแบบ XMLซึ่งตรงตามข้อกำหนด text/*มีขนาดเล็กกว่า (0.8) และเท่ากันระหว่างกัน หากเป็นไปได้ เซิร์ฟเวอร์ควรตอบสนองด้วยการเข้ารหัสการตอบสนองเป็น JSON.

    ในตัวอย่างต่อไปนี้ของคำขอ POST ที่สมบูรณ์ยิ่งขึ้น หน้า /iot/grabar_temperatura ของเซิร์ฟเวอร์ชื่อ polaridad.es เข้าถึงได้โดยใช้เวอร์ชัน 1.1 ของโปรโตคอล HTTP ไคลเอ็นต์ที่เรียกว่า Sensoreitor-2000 จะส่งข้อมูลที่เข้ารหัสเข้ามา JSONคาดหวังการตอบกลับในรูปแบบข้อความธรรมดา UTF-8 ใช้ภาษาสเปนจากสเปนโดยไม่ต้องใช้การบีบอัดซึ่งไม่จำเป็นต้องระบุ ข้อมูลที่ส่งไปยังเซิร์ฟเวอร์มีขนาดสูงสุด 65 ไบต์ เมื่อส่งการตอบกลับ การเชื่อมต่อระหว่างไคลเอนต์และเซิร์ฟเวอร์จะถูกปิด

    บทความต่อไปนี้จะอธิบาย วิธีกำหนดค่าฐานข้อมูล MySQL เพื่อจัดเก็บข้อมูลที่ส่งโดยออบเจ็กต์ IoT

    แสดงความคิดเห็น

    คุณอาจจะพลาด