Tóm tắt
Các API IoT có những đặc điểm phá vỡ các giả định của công cụ API tiêu chuẩn: băng thông bị hạn chế, tải trọng nhị phân, các mẫu xác thực thiết bị và các giao thức hoàn toàn không phải HTTP. Bài viết này đề cập đến những gì nhà phát triển IoT cần từ các công cụ API, nơi các công cụ tiêu chuẩn như Apidog phù hợp, những hạn chế của chúng (MQTT là một ví dụ rõ ràng), và cách kiểm thử hiệu quả lớp đối mặt với HTTP của backend IoT của bạn.
Giới thiệu
Phát triển IoT có một "tính cách kép" khi nói đến API. Một mặt, bạn có lớp giao tiếp đối mặt với thiết bị: các broker MQTT, các điểm cuối CoAP, các giao thức nhị phân tùy chỉnh và các luồng WebSocket. Các giao thức này được chọn vì hiệu quả băng thông, tiêu thụ điện năng thấp và phù hợp cho các mạng bị hạn chế.
Mặt khác, bạn có lớp đối mặt với nền tảng: các API REST để cấp phép thiết bị, phân phối cập nhật firmware, thu thập dữ liệu đo từ xa và các bảng điều khiển quản lý. Những API này trông giống như bất kỳ backend web nào khác.
Hầu hết các công cụ API phục vụ tốt cho nhóm thứ hai và bỏ qua hoàn toàn nhóm thứ nhất. Đó là một khoảng cách thực sự, nhưng cũng là một thực tế trung thực. Một nhà phát triển IoT mong đợi một nền tảng API tổng quát xử lý kiểm thử MQTT một cách tự nhiên sẽ thất vọng. Cách tiếp cận đúng đắn là hiểu công cụ API tiêu chuẩn của bạn hỗ trợ những giao thức nào, sử dụng nó hiệu quả cho những giao thức đó và biết khi nào cần dùng đến các công cụ chuyên biệt.
Bài viết này sẽ phác thảo bức tranh tổng quan về các giao thức IoT, giải thích những gì Apidog hỗ trợ (và những gì không), đồng thời cung cấp cho bạn một thiết lập kiểm thử thực tế cho các phần đối mặt với HTTP của backend IoT của bạn.
Bức tranh tổng quan về giao thức IoT
MQTT: publish-subscribe cho thiết bị
MQTT là giao thức thống trị cho giao tiếp từ thiết bị đến đám mây. Nó được thiết kế cho các mạng không đáng tin cậy, thiết bị bị hạn chế và định tuyến tin nhắn hiệu quả thông qua một broker.
Các khái niệm MQTT chính: chủ đề (các kênh tin nhắn phân cấp), mức QoS (fire-and-forget, at-least-once, exactly-once), tin nhắn giữ lại, và Lời trăng trối cuối cùng (LWT) để phát hiện thiết bị ngoại tuyến.
Apidog không hỗ trợ MQTT một cách tự nhiên. Để kiểm thử MQTT, hãy sử dụng:
- MQTT Explorer: Giao diện người dùng đồ họa (GUI) trên máy tính để bàn để tương tác với broker MQTT
- MQTTX: Client MQTT đa nền tảng có khả năng kịch bản
- mosquitto_sub/mosquitto_pub: Các công cụ CLI từ dự án Mosquitto
- HiveMQ Broker (phiên bản miễn phí): Broker MQTT trên đám mây với client web tích hợp
Nếu bạn đang xây dựng một hệ thống IoT dựa trên MQTT, hãy dành thời gian cho một công cụ kiểm thử MQTT chuyên dụng bên cạnh công cụ API REST của bạn.
HTTP/REST: lớp nền tảng
Mỗi nền tảng IoT đều có một bề mặt API REST, ngay cả khi các thiết bị không sử dụng REST cho việc truyền dữ liệu đo từ xa. REST xử lý:
- Cấp phép thiết bị: Đăng ký, tạo chứng chỉ, gán định danh
- Cập nhật firmware qua OTA: Kiểm tra cập nhật, tải xuống gói firmware
- Đẩy cấu hình: Gửi dữ liệu cấu hình tới thiết bị hoặc nhóm thiết bị
- Thu thập dữ liệu đo từ xa: Một số nền tảng IoT chấp nhận dữ liệu đo từ xa qua HTTP POST (AWS IoT, Particle, nhiều nền tảng khác)
- Quản lý thiết bị: Trạng thái đội thiết bị, lệnh từ xa, nhóm thiết bị
- Truy vấn dữ liệu: Dữ liệu đo từ xa lịch sử, nhật ký sự kiện, lịch sử cảnh báo
- Đăng ký Webhook: Cấu hình phân phối sự kiện đi ra ứng dụng của bạn
Toàn bộ bề mặt này có thể được kiểm thử bằng các công cụ REST tiêu chuẩn.
WebSocket: giao tiếp thiết bị hai chiều
WebSocket nằm giữa REST (phi trạng thái, yêu cầu-phản hồi) và MQTT (qua broker, publish-subscribe). Một số nền tảng IoT sử dụng WebSocket cho:
- Luồng lệnh thiết bị (phân phối lệnh theo thời gian thực đến một thiết bị đã kết nối)
- Hiển thị dữ liệu đo từ xa trực tiếp (truyền dữ liệu cảm biến đến giao diện quản lý)
- Cập nhật cấu hình hai chiều
Apidog hỗ trợ kiểm thử WebSocket với hỗ trợ tiêu đề kết nối, bao gồm hầu hết các kịch bản IoT dựa trên WebSocket.
CoAP: thiết bị bị hạn chế
CoAP (Giao thức ứng dụng hạn chế) là một giao thức giống HTTP được thiết kế cho các bộ vi điều khiển và các mạng rất bị hạn chế. Nó chạy trên UDP thay vì TCP.
Apidog không hỗ trợ CoAP. Để kiểm thử CoAP, hãy sử dụng copper4cr (tiện ích mở rộng trình duyệt) hoặc các công cụ CLI của libcoap.
Tải trọng nhị phân
Nhiều giao thức IoT sử dụng mã hóa nhị phân thay vì JSON: Protocol Buffers, MessagePack, CBOR hoặc các định dạng nhị phân tùy chỉnh. Mã hóa nhị phân rất cần thiết cho các kịch bản bị hạn chế băng thông, nơi một cảm biến gửi hàng ngàn dữ liệu mỗi ngày qua kết nối di động có tính phí.
Apidog hỗ trợ các phần thân yêu cầu nhị phân thô. Bạn có thể gửi các tải trọng nhị phân được mã hóa hex hoặc base64 trong các yêu cầu HTTP, điều này bao gồm các trường hợp nền tảng IoT của bạn chấp nhận nhị phân qua HTTP.
Các mẫu xác thực thiết bị trong IoT
Xác thực cho thiết bị IoT khác với xác thực API web thông thường. Các công cụ API đa năng hỗ trợ OAuth 2.0, mã thông báo Bearer và khóa API, nhưng IoT bổ sung thêm:
Mutual TLS (mTLS)
Nhiều nền tảng IoT (AWS IoT Core, Azure IoT Hub, Google Cloud IoT Core) sử dụng Mutual TLS để xác thực thiết bị. Mỗi thiết bị có một chứng chỉ client được cấp trong quá trình cấp phép. Thiết bị xuất trình chứng chỉ này khi kết nối.
Kiểm thử các điểm cuối mTLS yêu cầu tải chứng chỉ client và khóa riêng. Apidog hỗ trợ cấu hình chứng chỉ client cho các kết nối TLS, vì vậy bạn có thể kiểm thử các điểm cuối mTLS bằng cách tải các tệp chứng chỉ thiết bị của mình.
Khóa API dành riêng cho thiết bị
Các nền tảng IoT đơn giản thường cấp khóa API hoặc cặp mã thông báo cho mỗi thiết bị. Chúng hoạt động như các mã thông báo Bearer tiêu chuẩn hoặc tiêu đề khóa API, mà Apidog xử lý một cách tự nhiên.
JWT với các yêu cầu thiết bị
Một số nền tảng cấp JWT với các yêu cầu dành riêng cho thiết bị (ID thiết bị, model, phiên bản firmware). Xác thực JWT Bearer tiêu chuẩn hoạt động ở đây. Các script tiền yêu cầu có thể xử lý việc làm mới mã thông báo nếu mã thông báo có thời gian sống ngắn.
Xác thực tiêu đề tùy chỉnh
Một số nền tảng IoT độc quyền sử dụng các tiêu đề xác thực không tiêu chuẩn. Apidog hỗ trợ các tiêu đề tùy chỉnh tùy ý, vì vậy các tiêu đề xác thực dành riêng cho nền tảng như X-Device-Token hoặc X-Device-Serial rất dễ xử lý.
Kiểm thử API REST IoT với Apidog
Đây là lúc Apidog mang lại giá trị thực sự cho việc phát triển backend IoT.
Luồng cấp phép thiết bị
Cấp phép IoT thường là một luồng REST đa bước:
- Yêu cầu đăng ký thiết bị (POST với số serial thiết bị, model, phiên bản firmware)
- Nhận ID thiết bị và thông tin xác thực trong phản hồi
- Cấu hình thiết bị với thông tin xác thực đã nhận
- Xác minh trạng thái đăng ký (GET trạng thái thiết bị)
Hỗ trợ yêu cầu chuỗi của Apidog giúp kiểm thử từ đầu đến cuối. Một script sau yêu cầu ở bước 1 sẽ trích xuất ID thiết bị và lưu trữ nó dưới dạng biến môi trường. Bước 3 sử dụng biến đó trong URL yêu cầu. Toàn bộ luồng cấp phép chạy theo một trình tự.
Các điểm cuối cập nhật firmware OTA
Các luồng cập nhật OTA thường bao gồm:
- GET
/devices/{id}/update-check– trả về liệu có bản cập nhật nào khả dụng không - GET
/devices/{id}/firmware– trả về URL tải xuống firmware hoặc nhị phân - POST
/devices/{id}/update-status– báo cáo kết quả cài đặt
Kiểm thử những điều này với Apidog rất đơn giản. Đối với phản hồi nhị phân của firmware, bạn có thể kiểm tra các tiêu đề (Content-Type, Content-Length) và xác minh phản hồi là định dạng nhị phân mong muốn.
Thu thập dữ liệu đo từ xa qua HTTP
Nhiều nền tảng chấp nhận dữ liệu đo từ xa qua HTTP POST. Tải trọng có thể là JSON, nhưng ngày càng nhiều là nhị phân (Protocol Buffers, MessagePack) để tiết kiệm băng thông.
Để kiểm thử việc thu thập dữ liệu đo từ xa nhị phân với Apidog:
- Đặt loại phần thân yêu cầu là
raw - Chọn
binarylàm định dạng phần thân - Dán tải trọng được mã hóa hex hoặc base64 của bạn
- Đặt
Content-Type: application/octet-stream(hoặc loại mong đợi của nền tảng của bạn) - Gửi và kiểm tra phản hồi
Đối với các tải trọng protobuf cụ thể, bạn sẽ cần mã hóa tải trọng kiểm thử của mình bằng thư viện protobuf trước khi dán vào Apidog. Công cụ này không có mã hóa protobuf tích hợp sẵn, nhưng nó xử lý việc truyền tải một cách chính xác.
Kiểm thử với chứng chỉ SSL tùy chỉnh
Các backend IoT thường chạy trên các mạng riêng với chứng chỉ tự ký, hoặc sử dụng ghim chứng chỉ (certificate pinning). Cài đặt SSL của Apidog cho phép bạn:
- Tắt xác minh SSL để phát triển cục bộ (chứng chỉ tự ký trên máy chủ dev)
- Tải chứng chỉ CA tùy chỉnh để xác thực CA riêng
- Tải chứng chỉ client để kiểm thử mTLS
Đối với môi trường phát triển với chứng chỉ tự ký, việc tắt xác minh SSL sẽ giúp bạn khắc phục ngay lập tức. Đối với kiểm thử sản xuất, hãy tải chứng chỉ CA của bạn để xác thực chứng chỉ máy chủ một cách chính xác.
Kiểm thử WebSocket cho các luồng thiết bị IoT
Các nền tảng IoT ngày càng cung cấp các điểm cuối WebSocket để giao tiếp thiết bị theo thời gian thực. Các trường hợp sử dụng phổ biến:
Luồng bóng thiết bị / cặp song sinh: Một số nền tảng (AWS IoT, Azure IoT) cung cấp các điểm cuối WebSocket truyền các bản cập nhật bóng thiết bị. Khi một thiết bị báo cáo trạng thái, đám mây sẽ phản ánh nó thông qua kết nối WebSocket tới các client đã đăng ký.
Luồng dữ liệu đo từ xa trực tiếp: Các bảng điều khiển hiển thị dữ liệu cảm biến theo thời gian thực kết nối qua WebSocket tới một điểm cuối truyền dữ liệu đo từ xa.
Phân phối lệnh: Một số nền tảng phân phối lệnh theo thời gian thực đến các thiết bị trực tuyến qua WebSocket thay vì đợi thiết bị thăm dò.
Kiểm thử những điều này với client WebSocket của Apidog:
- Kết nối đến URL WebSocket với các tiêu đề xác thực cần thiết (thường là mã thông báo Bearer hoặc khóa API)
- Gửi một tin nhắn đăng ký nếu giao thức yêu cầu (ví dụ: đăng ký luồng sự kiện của một thiết bị)
- Quan sát luồng tin nhắn đến trong nhật ký tin nhắn
- Gửi tin nhắn lệnh kiểm thử và xác minh hành vi phía thiết bị
Đối với các nền tảng sử dụng subprotocol (tiêu đề Sec-WebSocket-Protocol), Apidog hỗ trợ chỉ định subprotocol trong cấu hình kết nối.
Nên sử dụng gì để kiểm thử MQTT
Vì Apidog không hỗ trợ MQTT, đây là một thiết lập kiểm thử MQTT thực tế:
MQTTX là client MQTT tổng quát có khả năng nhất. Nó có GUI trên máy tính để bàn, hỗ trợ tất cả các phiên bản giao thức MQTT (3.1.1 và 5.0), xử lý các kết nối TLS/mTLS và bao gồm chế độ kịch bản cho các chuỗi tin nhắn tự động. Đối với kiểm thử MQTT tương tác, MQTTX là điểm khởi đầu tốt nhất.
MQTT Explorer đơn giản hơn và rất tốt để duyệt cây chủ đề một cách trực quan. Nếu nhu cầu chính của bạn là hiểu những tin nhắn nào đang truyền qua một broker, MQTT Explorer sẽ giúp bạn thấy rõ điều đó.
Các công cụ CLI của mosquitto (mosquitto_pub, mosquitto_sub) có sẵn trên hầu hết các máy phát triển (thông qua trình quản lý gói) và hoạt động tốt cho các kiểm thử bằng kịch bản nhanh chóng. Nếu bạn cần đưa dữ liệu kiểm thử vào một chủ đề MQTT hoặc đăng ký và ghi lại các tin nhắn đến, các công cụ CLI thường nhanh hơn một GUI.
Để tích hợp CI/CD, mã kiểm thử tùy chỉnh sử dụng thư viện MQTT gốc của ngôn ngữ (paho-mqtt cho Python, MQTT.js cho Node) là cách tiếp cận linh hoạt nhất.
Thiết lập kiểm thử backend IoT thực tế
Cấu trúc môi trường Apidog:
Môi trường:
local-dev: base_url = http://localhost:8080, ssl_verify = false
staging: base_url = https://iot-staging.example.com, ssl_verify = true
prod: base_url = https://api.iot.example.com, ssl_verify = true
Biến:
device_id = dev_test_001
device_serial = SN-TEST-00001
auth_token = {{được lấy qua script tiền yêu cầu}}
firmware_version = 2.1.4
Cấu trúc thư mục:
provisioning/– các luồng đăng ký thiết bị và cấp phát thông tin xác thựctelemetry/– các kiểm thử điểm cuối thu thập dữ liệu (phiên bản JSON và nhị phân)ota/– các luồng kiểm tra và phân phối cập nhật firmwaredevice-management/– các thao tác CRUD trên các bản ghi thiết bịwebsocket/– các kiểm thử kết nối thời gian thựcerror-cases/– thông tin xác thực không hợp lệ, mã thông báo hết hạn, tải trọng bị lỗi định dạng
Danh sách kiểm tra kiểm thử tải trọng nhị phân:
- Kiểm thử với tải trọng nhị phân hợp lệ (trường hợp thành công)
- Kiểm thử với tải trọng nhị phân bị cắt cụt (tin nhắn không đầy đủ)
- Kiểm thử với tiêu đề Content-Type sai
- Kiểm thử kích thước tải trọng ở mức tối đa được ghi nhận của nền tảng của bạn
- Kiểm thử với xác thực thiết bị đúng và sai
Câu hỏi thường gặp
Apidog có hỗ trợ kiểm thử MQTT không?
Không. Apidog không có hỗ trợ MQTT nguyên bản. Để kiểm thử MQTT, hãy sử dụng MQTTX, MQTT Explorer hoặc các công cụ CLI của mosquitto. Apidog bao gồm các lớp HTTP và WebSocket của backend IoT của bạn, chứ không phải lớp broker MQTT.
Apidog có thể kiểm thử các điểm cuối CoAP không?
Không. CoAP chạy trên UDP, mà Apidog không hỗ trợ. Để kiểm thử CoAP, hãy sử dụng copper4cr hoặc libcoap.
Làm cách nào để kiểm thử tải trọng protobuf nhị phân trong Apidog?
Mã hóa thông điệp protobuf của bạn thành nhị phân bằng thư viện protobuf của ngôn ngữ bạn, sau đó chuyển đổi sang hex hoặc base64. Trong Apidog, đặt phần thân là nhị phân thô và dán tải trọng đã mã hóa. Đặt Content-Type thành application/protobuf hoặc loại mà nền tảng của bạn mong đợi.
Apidog có hỗ trợ mTLS để xác thực chứng chỉ thiết bị không?
Có. Cài đặt SSL của Apidog cho phép bạn tải chứng chỉ client và khóa riêng cho các kết nối mTLS. Điều này bao gồm kiểm thử các điểm cuối yêu cầu xác thực chứng chỉ thiết bị.
Chúng ta có thể sử dụng Apidog để kiểm thử AWS IoT Core, Azure IoT Hub hay Google Cloud IoT không?
Có, đối với các API REST HTTP của các nền tảng này. AWS IoT Core có các API quản lý REST, Azure IoT Hub có các điểm cuối REST để quản lý thiết bị và gọi phương thức trực tiếp, và Google Cloud IoT Core có các API REST. Tất cả đều có thể kiểm thử được với Apidog. Các kết nối MQTT đến các nền tảng này yêu cầu MQTTX hoặc tương tự.
Cách tiếp cận tốt nhất để kiểm thử mã hóa dữ liệu đo từ xa nhị phân băng thông thấp là gì?
Tạo các vật cố định kiểm thử (test fixtures) của các tải trọng nhị phân đã biết (hợp lệ, bị cắt cụt, bị lỗi định dạng) bằng thư viện mã hóa của bạn. Lưu trữ chúng dưới dạng biến môi trường hoặc tệp kiểm thử. Sử dụng Apidog để gửi chúng đến điểm cuối thu thập dữ liệu của bạn và xác minh mã phản hồi và hành vi xử lý.
Phát triển backend IoT bao gồm nhiều giao thức mà không có công cụ nào duy nhất có thể bao quát hoàn toàn. Câu trả lời thành thật là bạn cần ít nhất hai công cụ: một công cụ để kiểm thử MQTT và một công cụ cho REST/WebSocket. Apidog xử lý lớp HTTP một cách triệt để – cấp phép, quản lý, thu thập dữ liệu đo từ xa, tải trọng nhị phân, mTLS và các luồng WebSocket. Đối với MQTT, MQTTX hoặc mosquitto sẽ lấp đầy khoảng trống. Biết khi nào và nên sử dụng công cụ nào hữu ích hơn là giả vờ một công cụ bao quát mọi thứ.
