HTTP Server
A simple HTTP server with multiple endpoints, implemented as a Wasm component and packaged for Cosmonic Control.
Deploy with Helm
helm install http-server oci://ghcr.io/cosmonic-labs/charts/http-server
Repository: cosmonic-labs/http-server
Languages: Go
Interfaces: wasi/http
Get Started
Development requirements:
tinygo
for compiling Gowasm-tools
for Go bindingswash
for building the component
Clone the cosmonic-labs/control-demos
repository:
git clone https://github.com/cosmonic-labs/control-demos.git
cd control-demos/http-server
Start the development loop:
wash dev
View the code and make changes in main.go
.
Send a Request
You can send a request to the following endpoints:
GET /
Returns a list of available endpoints and their descriptions.
curl http://localhost:8000/
/error - return a 500 error
/form - echo the fields of a POST request
/headers - echo your user agent back as a server side header
/post - echo the body of a POST request
GET /error
Returns a 500 Internal Server Error.
curl -v http://localhost:8000/error
* Host localhost:8000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:8000...
* connect to ::1 port 8000 from ::1 port 51390 failed: Connection refused
* Trying 127.0.0.1:8000...
* Connected to localhost (127.0.0.1) port 8000
> GET /error HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/8.7.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 500 Internal Server Error
< content-type: text/plain; charset=utf-8
< x-content-type-options: nosniff
< vary: origin, access-control-request-method, access-control-request-headers
< access-control-allow-origin: *
< access-control-expose-headers: *
< connection: close
< transfer-encoding: chunked
< date: Thu, 19 Dec 2024 23:52:34 GMT
<
Something went wrong
* Closing connection
GET /headers
Returns your User-Agent in the response headers.
curl -v http://localhost:8000/headers
* Host localhost:8000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:8000...
* connect to ::1 port 8000 from ::1 port 51499 failed: Connection refused
* Trying 127.0.0.1:8000...
* Connected to localhost (127.0.0.1) port 8000
> GET /headers HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/8.7.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
< x-your-user-agent: curl/8.7.1
< vary: origin, access-control-request-method, access-control-request-headers
< access-control-allow-origin: *
< access-control-expose-headers: *
< connection: close
< transfer-encoding: chunked
< date: Thu, 19 Dec 2024 23:53:49 GMT
<
* Closing connection
Check headers!
POST /form
Echoes back form data from a POST request.
curl -X POST -d "field1=value1&field2=value2" http://localhost:8000/form
field2: value2
field1: value1
POST /post
Echoes back the entire body of a POST request.
curl -X POST -d "Hello World" http://localhost:8000/post
Hello World
Clean Up
You can cancel the wash dev
process with Ctrl-C
.
Build the Wasm Binary
Compile the component:
wash build
The .wasm
binary will output to ./build
.
Learn More
-
See the Cosmonic Control documentation for instructions on pushing your Wasm component to an OCI registry.
-
To learn how to extend this example with additional capabilities, see the Adding Capabilities section of the wasmCloud documentation.
-
For more on building components in Go, see the Component Developer Guide in the wasmCloud documentation.