2012-10-19 40 views
2

我在嵌入式堆棧中實現了一個RESTful Web API,該嵌入式堆棧提供了一個沒有REST功能的Web服務器。確切地說,嵌入式堆棧是在MQX RT操作系統之上運行的RTCS,微控制器是飛思卡爾的Kinetis K60。我可以區分GET/POST/DELETE/PUT請求並獲取帶有參數的URL(比如說/ this/firstValue/that/secondValue/...)。嵌入式網絡服務器中的CRUD

我使用strtok來分離url的不同元素並作出決定。但我的代碼只是醜陋的,因爲它充滿了strcmp函數和if語句。我還需要檢查firstValue和secondValue的邊界(我可以在set/get函數中執行此操作,但每個參數的2個函數將會重複)。此外,我希望能夠添加參數而不用搞亂決策樹。

我有兩個問題:

  • 你將如何使代碼很乾爽?
  • 您是否認爲REST web服務適合通過網絡控制我的微控制器?你有這樣的例子嗎?我正在使用REST Web服務,因爲它提供了身份驗證(但由於我無法設置SSL套接字,因此無法保密),我認爲這是一個優雅的解決方案。
    我評估了一些其他的解決方案:
  • SNMP(snmpset/SNMPGET):它的工作而設立的MIB是一個真正的痛苦,因爲它是SNMPv2中,仍然沒有祕密。
  • telnet服務器(我還沒有SSH解決方案):除了REST可能更容易從外部控制,我沒有看到任何優勢/缺點,我正在用捲曲測試它:)
  • SOAP遠程程序調用(我只是不喜歡它)
  • 任何其他的想法?我需要一些簡單的和可擴展的,因爲可能有多個目標需要控制。我的資源有限:s。我需要在某些時候保密,而且我希望在CyaSSL(一個嵌入式ssl實現)被移植到MQX時擁有它。他們說,這是怎麼回事下個月這樣的保密將不再是一個問題了,但如果你有其他的想法...

-
Emilien

+0

爲什麼你想在設備上使用REST接口?難道你不能僅僅爲設備寫一個接口並且建立一個REST接口/ API /無論你使用Python和一些庫在單獨的服務器上調用它,應該爲你節省很多代碼和「醜陋」。 – Anders

+0

是的,爲什麼不行,但我仍然必須自己做決策樹,當我考慮它時,它或多或少像SNMP MIB樹... – Emilien

回答

0

REST是一種architectual模式,所以我想你的意思你的服務器提供HTTP。

資源是'任何可以命名的數據'。例如嵌入式設備上的LED可能是'/ leds/led3'的URI您可以使用標準的PUT請求更改其保存的數據(其狀態,rgb led?等),並且GET應該返回其當前狀態。

至於編碼它,如果內存允許儘可能簡單地尋找路徑,通用樹結構可能是明智的。使用葉上的數據和函數指針(仿真對象)

+0

是的,它只提供HTTP。我會嘗試在葉子上帶有函數指針的樹。我只是好奇,想要一個REST web服務的C例子,但我找不到一個。 – Emilien