為基於 debian 的嵌入式設備編寫小型 Web 服務
我們正在開發嵌入式設備,將來會與我們的一些服務集成。該設備具有有限的功能集和針對特定案例的使用者定義模組。該設備基於 arm 架構,執行 Debian 的修改版本。對於網路和主要配置設置,我需要編寫小型 Web 服務。這應該是安全和輕便的。我混合使用輕量級 Web 伺服器(如 lighttpd)和 Python 等語言對此進行了測試,並設法讓原型工作。它具有正常執行的 Web 服務,並且該 Web 服務可以與在初始步驟中推送配置的客戶端集成。我擔心的是,即使這是輕量級的,我也不需要在對設備具有高級訪問權限的設備上部署全功能的 Web 伺服器來配置它。即使我在配置後禁用了這個過程
除了擁有成熟的 Web 伺服器之外,還有什麼方法可以擁有小型的 rest api 嗎?我已經測試過restbed C++ rest api。這是複雜且基於python的無伺服器Web服務。但我也不想部署python。因為這個服務只向客戶端傳輸低於 10 個參數,而且它是矯枉過正的。是否有任何安全的方法可以在沒有類似守護程序的服務的情況下實現這一點。
儘管這個問題有點模糊並且可以發表意見,但我會把我的問題扔在那裡。Golang在標準庫中有一個非常易於使用的伺服器包。它看起來很像 C,幾乎可以在任何平台和架構上編譯為本機執行檔,並且您可以託管一個非常簡單的 Web 伺服器,如下所示。
package main import ( "fmt" "log" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) } func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe(":8080", nil)) }
如果您想要安全性,您可以通過創建一些自簽名證書來輕鬆設置 TLS,只需將 http.ListenAndServe 替換為
err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)
它非常輕巧,易於在任何地方執行。正如 Eli 在評論中巧妙地指出的那樣,交叉編譯也很容易做到,這意味著可以快速建構和部署到您的嵌入式設備。