writing small web service for embedded device based on debian [closed]

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
1
down vote

favorite












We are developing embedded device which will integrate with some of our services in future. This device have limited set of functionalities and user defined mods for particular use cases. Based on arm architecture this device running modified version of Debian. For network and main configuration setup I need to write small web service. This should be secure and light. I tested this with mix of lightweight web servers such as lighttpd and languages like python and manged to get prototype working. which have the functioning web service and that web service can integrate with clients which push the configuration in initial step. My concern is even though this is lightweight I dont need to deploy full featured web server on devices which have high level of access to the device for configure it. even though I disable this process after the configuring



Is there any way to have small rest api other than having full-blown web server ? I already tested restbed C++ rest api. which is complex and python based server less web service. but I don't want to deploy python either. since this service only transmit like below 10 parameters to the client and it's overkill. is there any secure way to implement this without daemon like service.










share|improve this question















closed as too broad by muru, msp9011, schily, Archemar, Jeff Schaller Aug 14 at 11:00


Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.














  • To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
    – meuh
    Aug 13 at 10:05










  • Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
    – charith
    Aug 14 at 2:55














up vote
1
down vote

favorite












We are developing embedded device which will integrate with some of our services in future. This device have limited set of functionalities and user defined mods for particular use cases. Based on arm architecture this device running modified version of Debian. For network and main configuration setup I need to write small web service. This should be secure and light. I tested this with mix of lightweight web servers such as lighttpd and languages like python and manged to get prototype working. which have the functioning web service and that web service can integrate with clients which push the configuration in initial step. My concern is even though this is lightweight I dont need to deploy full featured web server on devices which have high level of access to the device for configure it. even though I disable this process after the configuring



Is there any way to have small rest api other than having full-blown web server ? I already tested restbed C++ rest api. which is complex and python based server less web service. but I don't want to deploy python either. since this service only transmit like below 10 parameters to the client and it's overkill. is there any secure way to implement this without daemon like service.










share|improve this question















closed as too broad by muru, msp9011, schily, Archemar, Jeff Schaller Aug 14 at 11:00


Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.














  • To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
    – meuh
    Aug 13 at 10:05










  • Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
    – charith
    Aug 14 at 2:55












up vote
1
down vote

favorite









up vote
1
down vote

favorite











We are developing embedded device which will integrate with some of our services in future. This device have limited set of functionalities and user defined mods for particular use cases. Based on arm architecture this device running modified version of Debian. For network and main configuration setup I need to write small web service. This should be secure and light. I tested this with mix of lightweight web servers such as lighttpd and languages like python and manged to get prototype working. which have the functioning web service and that web service can integrate with clients which push the configuration in initial step. My concern is even though this is lightweight I dont need to deploy full featured web server on devices which have high level of access to the device for configure it. even though I disable this process after the configuring



Is there any way to have small rest api other than having full-blown web server ? I already tested restbed C++ rest api. which is complex and python based server less web service. but I don't want to deploy python either. since this service only transmit like below 10 parameters to the client and it's overkill. is there any secure way to implement this without daemon like service.










share|improve this question















We are developing embedded device which will integrate with some of our services in future. This device have limited set of functionalities and user defined mods for particular use cases. Based on arm architecture this device running modified version of Debian. For network and main configuration setup I need to write small web service. This should be secure and light. I tested this with mix of lightweight web servers such as lighttpd and languages like python and manged to get prototype working. which have the functioning web service and that web service can integrate with clients which push the configuration in initial step. My concern is even though this is lightweight I dont need to deploy full featured web server on devices which have high level of access to the device for configure it. even though I disable this process after the configuring



Is there any way to have small rest api other than having full-blown web server ? I already tested restbed C++ rest api. which is complex and python based server less web service. but I don't want to deploy python either. since this service only transmit like below 10 parameters to the client and it's overkill. is there any secure way to implement this without daemon like service.







embedded webserver api






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Aug 14 at 3:03

























asked Aug 13 at 3:15









charith

15710




15710




closed as too broad by muru, msp9011, schily, Archemar, Jeff Schaller Aug 14 at 11:00


Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.






closed as too broad by muru, msp9011, schily, Archemar, Jeff Schaller Aug 14 at 11:00


Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.













  • To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
    – meuh
    Aug 13 at 10:05










  • Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
    – charith
    Aug 14 at 2:55
















  • To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
    – meuh
    Aug 13 at 10:05










  • Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
    – charith
    Aug 14 at 2:55















To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
– meuh
Aug 13 at 10:05




To do any rest api you will need at least a cgi server. Perhaps one small enough for you in C with https is mini_httpd. You would need to write the "rest" part yourself. There are also Perl solutions, but since you don't want Python that won't do. Perhaps you could start from this simple shell script server or this one.
– meuh
Aug 13 at 10:05












Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
– charith
Aug 14 at 2:55




Thanks. I already tested both the solutions you suggest as well as httpd on busybox. I'll try to do this setup with mini httpd. but I'm worried about the permissions those web servers that I need to give for execute high-level systems tasks. At the moment I have configured sudo for specific commands. Is there any proper way to do it securely ?. And also I would thankful if you can suggest good books on this exact area
– charith
Aug 14 at 2:55










1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted










Although this question is a little vague and open to opinion I'll throw mine out there. Golang Has a very easy to use server package right in the standard library. It looks a lot like C, compiles to native executables on almost any platform and architecture and you can host a very simple webserver with very few lines as in below.



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))



If you want security you can very easily set up TLS by creating some self signed certs, and simply replacing the http.ListenAndServe with err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)



It's very lightweight and easy to run anywhere. As Eli smartly pointed out in the comments, cross compilation is also very easy to do, meaning quick builds and deploys to your embedded devices.






share|improve this answer


















  • 1




    A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
    – Eli Heady
    Aug 14 at 4:28










  • Thanks for the answer. Looks like really interesting. I started to learn . !!
    – charith
    Aug 20 at 3:19

















1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
1
down vote



accepted










Although this question is a little vague and open to opinion I'll throw mine out there. Golang Has a very easy to use server package right in the standard library. It looks a lot like C, compiles to native executables on almost any platform and architecture and you can host a very simple webserver with very few lines as in below.



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))



If you want security you can very easily set up TLS by creating some self signed certs, and simply replacing the http.ListenAndServe with err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)



It's very lightweight and easy to run anywhere. As Eli smartly pointed out in the comments, cross compilation is also very easy to do, meaning quick builds and deploys to your embedded devices.






share|improve this answer


















  • 1




    A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
    – Eli Heady
    Aug 14 at 4:28










  • Thanks for the answer. Looks like really interesting. I started to learn . !!
    – charith
    Aug 20 at 3:19














up vote
1
down vote



accepted










Although this question is a little vague and open to opinion I'll throw mine out there. Golang Has a very easy to use server package right in the standard library. It looks a lot like C, compiles to native executables on almost any platform and architecture and you can host a very simple webserver with very few lines as in below.



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))



If you want security you can very easily set up TLS by creating some self signed certs, and simply replacing the http.ListenAndServe with err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)



It's very lightweight and easy to run anywhere. As Eli smartly pointed out in the comments, cross compilation is also very easy to do, meaning quick builds and deploys to your embedded devices.






share|improve this answer


















  • 1




    A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
    – Eli Heady
    Aug 14 at 4:28










  • Thanks for the answer. Looks like really interesting. I started to learn . !!
    – charith
    Aug 20 at 3:19












up vote
1
down vote



accepted







up vote
1
down vote



accepted






Although this question is a little vague and open to opinion I'll throw mine out there. Golang Has a very easy to use server package right in the standard library. It looks a lot like C, compiles to native executables on almost any platform and architecture and you can host a very simple webserver with very few lines as in below.



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))



If you want security you can very easily set up TLS by creating some self signed certs, and simply replacing the http.ListenAndServe with err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)



It's very lightweight and easy to run anywhere. As Eli smartly pointed out in the comments, cross compilation is also very easy to do, meaning quick builds and deploys to your embedded devices.






share|improve this answer














Although this question is a little vague and open to opinion I'll throw mine out there. Golang Has a very easy to use server package right in the standard library. It looks a lot like C, compiles to native executables on almost any platform and architecture and you can host a very simple webserver with very few lines as in below.



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))



If you want security you can very easily set up TLS by creating some self signed certs, and simply replacing the http.ListenAndServe with err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)



It's very lightweight and easy to run anywhere. As Eli smartly pointed out in the comments, cross compilation is also very easy to do, meaning quick builds and deploys to your embedded devices.







share|improve this answer














share|improve this answer



share|improve this answer








edited Aug 14 at 4:41

























answered Aug 14 at 3:22









alexmherrmann

1867




1867







  • 1




    A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
    – Eli Heady
    Aug 14 at 4:28










  • Thanks for the answer. Looks like really interesting. I started to learn . !!
    – charith
    Aug 20 at 3:19












  • 1




    A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
    – Eli Heady
    Aug 14 at 4:28










  • Thanks for the answer. Looks like really interesting. I started to learn . !!
    – charith
    Aug 20 at 3:19







1




1




A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
– Eli Heady
Aug 14 at 4:28




A big plus for this kind of project is Go's really good cross compiling toolchains. Though if the target system is really memory constrained, the size of Go's rather large static binaries can be an issue. Given that the question mentions using Python successfully that's probably not an issue here.
– Eli Heady
Aug 14 at 4:28












Thanks for the answer. Looks like really interesting. I started to learn . !!
– charith
Aug 20 at 3:19




Thanks for the answer. Looks like really interesting. I started to learn . !!
– charith
Aug 20 at 3:19


Popular posts from this blog

Peggy Mitchell

Palaiologos

The Forum (Inglewood, California)