Um pequeno servidor HTTP via FFI para servir respostas de rotas estáticas a partir da Bern.
import vendor/http/http
lib/vendor/http - windows/bern_http.dll, macos/libbern_http.dylib ou linux/libbern_http.so. O correto é escolhido automaticamente a partir de get_host_machine().
Inicia um servidor ligado a 0.0.0.0 na porta dada; devolve um handle do servidor.
server = http_server_start(8080)
Inicia um servidor ligado a um endereço de host específico.
server = http_server_start_on(8080, "127.0.0.1")
Se o servidor ainda está rodando.
http_server_running(server) -- Saída: true
Para um servidor em execução.
http_server_stop(server) -- Saída: true
Define a resposta padrão para qualquer rota não casada.
http_server_set_default(server, 404, "text/plain; charset=utf-8", "Not found") -- Saída: true
O construtor de rota geral - controle total de método, status e content type.
http_server_add_route(server, "GET", "/teapot", 418, "text/plain", "I'm a teapot") -- Saída: true
Adiciona uma rota GET que retorna 200 com corpo em texto puro.
http_server_get(server, "/", "hello from bern http") -- Saída: true
Adiciona uma rota GET que retorna HTML.
http_server_add_route_html(server, "/page", "Bern
") -- Saída: true
Adiciona uma rota GET que retorna JSON.
http_server_add_route_json(server, "/health", "{\"ok\":true}")
-- Saída: true
Roda um único tick de polling, esperando até timeout_ms por atividade. Use para dirigir seu próprio loop de eventos.
http_server_poll(server, 50)
Continua o polling enquanto o servidor estiver rodando - a forma mais simples de "só servir".
http_server_serve_forever(server, 50)
Constantes de conveniência para códigos de status HTTP comuns:
| Constante | Valor |
|---|---|
HTTP_STATUS_OK | 200 |
HTTP_STATUS_CREATED | 201 |
HTTP_STATUS_NO_CONTENT | 204 |
HTTP_STATUS_BAD_REQUEST | 400 |
HTTP_STATUS_NOT_FOUND | 404 |
HTTP_STATUS_INTERNAL_ERROR | 500 |
Um servidor pequeno e completo: registrar algumas rotas de content types diferentes, definir um fallback e servir. Isso combina quase toda função do módulo:
import vendor/http/http server = http_server_start(8080) http_server_get(server, "/", "hello from bern http") http_server_add_route_html(server, "/page", "Bern
It works!
") http_server_add_route_json(server, "/health", "{\"ok\":true}") http_server_add_route(server, "/teapot", 418, "text/plain", "I'm a teapot") http_server_set_default(server, HTTP_STATUS_NOT_FOUND, "text/plain", "Not found") -- bloqueia e atende requisições até o servidor parar http_server_serve_forever(server, 50)
Se você precisa fazer outro trabalho entre as requisições, dirija o loop você mesmo com http_server_poll:
import vendor/http/http
server = http_server_start(8080)
http_server_get(server, "/", "tick")
loop http_server_running(server) do
http_server_poll(server, 100)
-- ... rode tarefas de fundo aqui ...
end