גישה להתקני חומרה באינטרנט

בוחרים את ממשק ה-API המתאים כדי לתקשר עם מכשיר חומרה לבחירתכם.

François Beaufort
François Beaufort

מטרת המדריך הזה היא לעזור לכם לבחור את ממשק ה-API הטוב ביותר לתקשורת עם מכשיר חומרה (למשל מצלמת אינטרנט, מיקרופון וכו') באינטרנט. הכוונה היא שאפשר לקבל את כל מה שצריך בזמן הקצר ביותר. במילים אחרות, אתם יודעים מהו התרחיש הכללי לשימוש שאתם רוצים לפתור (למשל, גישה לסרטון), אבל אתם לא יודעים באיזה API להשתמש או אם יש דרך אחרת להשיג את זה.

בעיה נפוצה שאני רואה שמפתחי אינטרנט נופלים בה היא שהם קופצים לממשקי API ברמה נמוכה בלי ללמוד על ממשקי ה-API ברמה גבוהה יותר, שקל יותר להטמיע אותם והם מספקים חוויית משתמש טובה יותר. לכן, במדריך הזה נתחיל בהמלצה על ממשקי API ברמה גבוהה יותר, אבל נציין גם ממשקי API ברמה נמוכה יותר למקרה שתבחרו ש-API ברמה גבוהה יותר לא עונה על הצרכים שלכם.

🕹 קבלת אירועי קלט מהמכשיר הזה

נסו להאזין לאירועים מסוג Keyboard ו-Pointer. אם המכשיר הוא בקר משחקים, אפשר להשתמש ב-Gamepad API כדי לדעת אילו לחצנים לוחצים ואילו צירים זזים.

אם אף אחת מהאפשרויות האלה לא מתאימה לכם, יכול להיות ש-API ברמה נמוכה הוא הפתרון. כדי להתחיל, כדאי לעיין במאמר איך מתקשרים עם המכשיר.

📸 גישה לווידאו ולאודיו מהמכשיר הזה

אפשר להשתמש ב-MediaDevices.getUserMedia() כדי לקבל שידורי אודיו ווידאו חיים מהמכשיר הזה, ולקרוא מידע נוסף על צילום אודיו ווידאו. אפשר גם לשלוט בהזזה, בהטיה ובמרחק התצוגה של המצלמה, בהגדרות אחרות של המצלמה כמו בהירות והתאמה ואפילו לצלם תמונות סטילס. אפשר להשתמש ב-Web Audio כדי להוסיף אפקטים לאודיו, ליצור חזותיות של אודיו או להחיל אפקטים מרחביים (כמו panning). כדאי גם לקרוא את המאמר איך לבדוק את ביצועי אפליקציות Web Audio ב-Chrome.

אם אף אחת מהאפשרויות האלה לא מתאימה לכם, יכול להיות ש-API ברמה נמוכה הוא הפתרון. כדי להתחיל, כדאי לעיין במאמר איך מתקשרים עם המכשיר.

🖨 הדפסה במכשיר הזה

משתמשים ב-window.print() כדי לפתוח תיבת דו-שיח בדפדפן שמאפשרת למשתמש לבחור את המכשיר הזה כיעד להדפסת המסמך הנוכחי.

אם הפתרון הזה לא מתאים לכם, יכול להיות ש-API ברמה נמוכה יעזור לכם. כדי להתחיל, כדאי לעיין במאמר איך מתקשרים עם המכשיר.

🔐 אימות באמצעות המכשיר הזה

שימוש ב-WebAuthn כדי ליצור פרטי כניסה עם מפתח ציבורי חזק, מאומת ומוגבל למקור, באמצעות מכשיר האבטחה הזה לחומרה, כדי לאמת משתמשים. הוא תומך באימות באמצעות מכשירים עם Bluetooth,‏ NFC ו-USB ניידים מסוג U2F או FIDO2 – שנקראים גם מפתחות אבטחה – וגם באימות פלטפורמה שמאפשר למשתמשים לבצע אימות באמצעות טביעות האצבע או נעילת המסך. כדאי לעיין במאמר פיתוח האפליקציה הראשונה עם WebAuthn.

אם המכשיר הזה הוא סוג אחר של מכשיר אבטחה פיזי (למשל ארנק קריפטו), יכול להיות שממשק API ברמה נמוכה יספק פתרון. כדי להתחיל, כדאי לעיין במאמר איך מתקשרים עם המכשיר.

🗄 גישה לקבצים במכשיר הזה

שימוש ב-File System Access API כדי לקרוא מקבצים ותיקיות במכשיר של המשתמש ולשמור בהם שינויים ישירות. אם האפשרות הזו לא זמינה, אפשר להשתמש ב-File API כדי לבקש מהמשתמש לבחור קבצים מקומיים מתיבת דו-שיח בדפדפן, ואז לקרוא את התוכן של הקבצים האלה.

אם אף אחת מהאפשרויות האלה לא מתאימה לכם, יכול להיות ש-API ברמה נמוכה הוא הפתרון. כדי להתחיל, כדאי לעיין במאמר איך מתקשרים עם המכשיר.

🧲 גישה לחיישנים במכשיר הזה

אפשר להשתמש ב-Generic Sensor API כדי לקרוא ערכים גולמיים של חיישנים מחיששני תנועה (למשל מד תאוצה או ג'ירוסקופ) ומחיישנים סביבתיים (למשל חיישן אור רגיש לסביבה, מגנטומטר). אם האפשרות הזו לא זמינה, אפשר להשתמש באירועים DeviceMotion ו-DeviceOrientation כדי לקבל גישה למד התאוצה, לג'ירוסקופ ולמצפן המובנים במכשירים ניידים.

אם הפתרון הזה לא מתאים לכם, יכול להיות ש-API ברמה נמוכה יעזור לכם. כדי להתחיל, כדאי לעיין במאמר איך מתקשרים עם המכשיר.

🛰 גישה לקווי הרוחב והאורך של ה-GPS במכשיר הזה

אפשר להשתמש ב-Geolocation API כדי לקבל את קו הרוחב וקו האורך של המיקום הנוכחי של המשתמש במכשיר הזה.

אם הפתרון הזה לא מתאים לכם, יכול להיות ש-API ברמה נמוכה יעזור לכם. כדי להתחיל, כדאי לעיין במאמר איך מתקשרים עם המכשיר.

🔋 בדיקת הסוללה במכשיר הזה

אתם יכולים להשתמש ב-Battery API כדי לקבל מידע מהמארח על רמת הטעינה של הסוללה, ולקבל התראות כשרמת הטעינה או סטטוס הטעינה משתנים.

אם הפתרון הזה לא מתאים לכם, יכול להיות ש-API ברמה נמוכה יעזור לכם. כדי להתחיל, כדאי לעיין במאמר איך מתקשרים עם המכשיר.

📞 לתקשר עם המכשיר הזה דרך הרשת

ברשת המקומית, אפשר להשתמש ב-Remote Playback API כדי לשדר אודיו ו/או וידאו במכשיר הפעלה מרחוק (למשל, טלוויזיה חכמה או רמקול אלחוטי), או להשתמש ב-Presentation API כדי ליצור עיבוד (רנדור) של דף אינטרנט במסך שני (למשל, צג משני שמחובר באמצעות כבל HDMI או טלוויזיה חכמה שמחוברת באופן אלחוטי).

אם המכשיר הזה חושף שרת אינטרנט, אפשר להשתמש ב-Fetch API ו/או ב-WebSockets כדי לאחזר נתונים מסוימים מהמכשיר הזה על ידי שליחת בקשות לנקודות קצה מתאימות. שקעי TCP ו-UDP לא זמינים באינטרנט, אבל כדאי לבדוק את WebTransport כדי לטפל בחיבורי רשת אינטראקטיביים, דו-כיווניים ומרובבים. חשוב לזכור שאפשר להשתמש ב-WebRTC גם כדי להעביר נתונים בזמן אמת לדפדפנים אחרים באמצעות פרוטוקול peer-to-peer.

🧱 איך מתקשרים עם המכשיר

ההחלטה באיזה ממשק API ברמה נמוכה להשתמש נקבעת לפי אופי החיבור הפיזי שלכם למכשיר. אם החיבור אלחוטי, כדאי לבדוק את Web NFC לחיבורים אלחוטיים לטווח קצר מאוד, ואת Web Bluetooth או Web Serial למכשירים אלחוטיים בקרבת מקום.

  • באמצעות Web NFC, אפשר לקרוא ולכתוב במכשיר הזה כשהוא קרוב למכשיר של המשתמש (בדרך כלל במרחק של 5 עד 10 ס"מ). כלים כמו NFC TagInfo by NXP מאפשרים לעיין בתוכן של המכשיר הזה למטרות של הנדסת-הפוך.

  • באמצעות Web Bluetooth, אפשר להתחבר למכשיר הזה בחיבור Bluetooth עם צריכת אנרגיה נמוכה. קל מאוד לתקשר עם המכשיר כשמשתמשים בשירותי Bluetooth GATT סטנדרטיים (כמו שירות הסוללה), כי ההתנהגות שלהם מתועדת היטב. אם לא, בשלב הזה תצטרכו למצוא מסמכי עזרה לגבי החומרה של המכשיר הזה או לבצע עליו הנדסת-הפוך. אפשר להשתמש בכלים חיצוניים כמו nRF Connect for Mobile ובכלים מובנים בדפדפן, כמו הדף הפנימי about://bluetooth-internals בדפדפנים שמבוססים על Chromium. מומלץ לקרוא את המאמר של Uri Shaked בנושא הנדסה הפוכה של נורת Bluetooth. שימו לב שמכשירי Bluetooth יכולים גם לדבר בפרוטוקולים של HID או של יציאה טורית.

  • באמצעות Serial over Bluetooth אפשר לתקשר עם שירותי RFCOMM במכשירי Bluetooth Classic מותאמים, כמו הפרופיל הסטנדרטי של יציאה טורית (SPP). עם זאת, בשירותים מותאמים אישית שמבוססים על RFCOMM, צריך לעיין במסמכי התיעוד של הספק של המכשיר כדי למצוא את ה-UUID של השירות שצריך להעביר אל requestPort().

אם החיבור הוא קווי, כדאי לבדוק את ממשקי ה-API האלה בסדר הספציפי הזה:

  1. כדי להבין את המכשיר הזה, חשוב להבין את הדוחות של HID ואת מתארי הדוחות באמצעות אוספים ב-WebHID. יכול להיות שיהיה קשה לעשות זאת בלי מסמכי התיעוד של הספק לגבי המכשיר הזה. כלים כמו Wireshark יכולים לעזור לכם לבצע הנדסה לאחור. אפשר גם להשתמש באפליקציית האינטרנט של HID Explorer כדי להעביר את המידע של מכשירי HID לפורמט שאפשר לקרוא אותו.

  2. ב-Web Serial, בלי מסמכי תיעוד של הספק לגבי המכשיר הזה ובהתאם לפקודות שהמכשיר תומך בהן, קשה לעשות זאת, אבל עדיין אפשר לנסות ולגלות. כדי לבצע הנדסה לאחור של המכשיר הזה, אפשר לתעד תנועה גולמית ב-USB באמצעות כלים כמו Wireshark. אפשר גם להשתמש באפליקציית האינטרנט Serial Terminal כדי להתנסות במכשיר הזה, אם הוא משתמש בפרוטוקול שאפשר לקרוא אותו.

  3. ב-WebUSB, בלי תיעוד ברור של המכשיר ופקודות ה-USB שהוא תומך בהן, קשה לעשות זאת, אבל עדיין אפשר לנסות ולגלות. כדאי לצפות בסרטון Exploring WebUSB and its exciting potential של Suz Hinton. אפשר גם לבצע הנדסה לאחור של המכשיר הזה על ידי תיעוד תעבורת USB גולמית ובדיקה של תיאורי USB באמצעות כלים חיצוניים כמו Wireshark וכלים מובנים בדפדפן, כמו הדף הפנימי about://usb-internals בדפדפנים שמבוססים על Chromium.

תודות

תודה ל-Reilly Grant, ל-Thomas Steiner ול-Kayce Basques על בדיקת המאמר הזה.

תמונה של Darya Tryfanava ב-Unsplash.