Thiết kế API tương tác ứng dụng website khi sử dụng AWS IoT Core

Mặc dù các dịch vụ riêng biệt trong AWS như IoT Core, Device Shadow, DynamoDB,… đều cung cấp các phương thức để ứng dụng có thể kết nối và trao đổi dữ liệu qua API hay SDK, tuy nhiên một hệ thống IoT hoàn chỉnh đòi hỏi phải thiết kế riêng một tập hợp các API lớp ứng dụng theo một tiêu chuẩn chung nhất để các ứng dụng có thể dễ dàng tương tác đảm bảo khả năng dễ dàng mở rộng, kế thừa và bảo trì hệ thống nâng cấp về sau.
Bài viết này sẽ chia sẻ về ví dụ thiết kế hệ thống nhà thông minh ứng dụng nền tảng điện toán đám mây AWS, trong đó sử dụng dịch vụ Amazon API Gateway kết hợp AWS Lambda làm dịch vụ phụ trợ (backend) để thiết kế một bộ gồm các API theo tiêu chuẩn REST giúp ứng dụng bên ngoài tương tác truy vấn dữ liệu. Tham khảo từ ví dụ này, các bạn cũng có thể xây dựng các API phù hợp cho hệ thống IoT của chính các bạn. 


Hình 1: Sơ đồ kiến trúc thiết kế API cho ứng dụng website theo kiến trúc REST

Với thiết kế hệ thống nhà thông minh, nhóm thực hiện thiết kế 4 tài nguyên để ứng dụng tương tác với hệ thống như sau:

Đọc dữ liệu reported của Thing trong Device Shadow cảm biến trong khoảng thời gian chỉ định:

  • Phương thức: GET
    • URL: https://yourapiurl.amazonaws.com/prod/getdata/reported/thingname/{thingname}
    • Path parameter:
      • {thingname}: tên của thing trong AWS IoT Core mà ứng dụng muốn đọc dữ liệu

Đọc dữ liệu cảm biến trong khoảng thời gian chỉ định:

  • Phương thức: GET
    • URL: https://yourapidomain.amazonaws.com/prod/getdata/sensor/deviceid/{deviceid}?dtstart={dtstart}&dtend={dtend}
    • Path parameter:
      • {deviceid}: mã trạng thái của thiết bị được lưu trữ trong CSDL DynamoDB
    • Query String Parameter:
      • {dtstart}: thời gian bắt đầu của dữ liệu được truy vấn
      • {dtend}: thời gian kết thúc của dữ liệu được truy vấn

Gửi lệnh điều khiển trạng thái đến thiết bị:

  • Phương thức: POST
    • URL: https://yourapidomain.amazonaws.com/prod/command/relay/thingname/{thingname}
    • Path parameter:
    • { thingname }: tên của thing trong AWS IoT Core mà ứng dụng muốn cập nhật trạng thái
    • Body:
      {
      “devicename”: “state”
      }

      • devicename: light1| light2 | fan
      • state: on | off

Gửi lệnh cấu hình ngưỡng cảnh báo khí ga đến thiết bị:

  • Phương thức: POST
    • URL: https://yourapidomain.amazonaws.com/prod/config/threshold/thingname/{thingname}
    • Path parameter:
      • { thingname }: tên của thing trong AWS IoT Core mà ứng dụng muốn cập nhật cấu hình ngưỡng
    • Body:
      {
      “gas”: “value”,
      “pir”: “value”
      }

      • value: giá trị ngưỡng hoặc trạng thái muốn cấu hình

API Gateway theo kiến trúc REST trên nền giao thức HTTP nên sử dụng mô hình request/response gồm 4 quá trình [1]:

  • Method request: giao diện công khai của một phương thức REST API trong API Gateway xác định các tham số và nội dung mà ứng dụng cần gửi yêu cầu để truy cập đến phần phụ trợ thông qua API.
  • Intergration request: Giao diện bên trong của phương thức REST API trong API Gateway, thực hiện ánh xạ nội dung của các tham số và nội dung của method request sang định dạng mà chương trình phụ trợ yêu cầu.
  • Intergration response: Giao diện nội bộ phương thức REST API trong API Gateway, thực hiện ánh xạ status code, header và body từ chương trình phụ trợ sang định dạng phản hồi trả.
  • Method response: giao diện công khai của REST API xác định mã trạng thái (status code), tiêu đề (header) và mô hình nội dung (body model) mà ứng dụng mong đợi trong phản hồi từ API.


Hình 2: Quá trình hoạt động của các thành phần API Gateway theo mô hình request/response

Cùng với nội dung các bài phân tích và chia sẻ trước, có thể thấy AWS IoT là dịch vụ cung cấp các dịch vụ nền tảng về IoT sâu rộng, trong đó dịch vụ AWS IoT Core đóng vai trò trung tâm để các thiết bị IoT có thể kết nối đến AWS và làm việc với các dịch vụ đám mây khác. Nền tảng AWS cung cấp các dịch vụ đa dạng hoàn toàn đáp ứng được đầy đủ các yêu cầu thiết kế của một hệ thống IoT bất kỳ.

Tìm hiểu thêm:
Fanpage Cộng đồng Kỹ thuật TAPIT: TAPIT – Learning, Research and Sharing Community

Chuỗi bài viết được thực hiện và chia sẻ bởi LCV.Khải và Các nhóm nghiên cứu tại Cộng đồng Kỹ thuật TAPIT
Chúc các bạn thành công!

Tài liệu tham khảo
[1] AWS, “Create a REST API with Lambda integrations”,  Amazon API Gateway Developer Guide, Amazon Web Service, 2020.