vendor/http Vendor

Um pequeno servidor HTTP via FFI para servir respostas de rotas estáticas a partir da Bern.

import vendor/http/http
Nota: Este módulo carrega um binário de plataforma de 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().

Ciclo de vida do servidor

http_server_start(porta) → ptr

Inicia um servidor ligado a 0.0.0.0 na porta dada; devolve um handle do servidor.

server = http_server_start(8080)
http_server_start_on(porta, host) → ptr

Inicia um servidor ligado a um endereço de host específico.

server = http_server_start_on(8080, "127.0.0.1")
http_server_running(server) → booleano

Se o servidor ainda está rodando.

http_server_running(server)
-- Saída: true
http_server_stop(server) → booleano

Para um servidor em execução.

http_server_stop(server)
-- Saída: true

Rotas & respostas

http_server_set_default(server, status, content_type, corpo) → booleano

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
http_server_add_route(server, método, path, status, content_type, corpo) → booleano

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
http_server_get(server, path, corpo) → booleano

Adiciona uma rota GET que retorna 200 com corpo em texto puro.

http_server_get(server, "/", "hello from bern http")
-- Saída: true
http_server_add_route_html(server, path, html) → booleano

Adiciona uma rota GET que retorna HTML.

http_server_add_route_html(server, "/page", "

Bern

") -- Saída: true
http_server_add_route_json(server, path, json) → booleano

Adiciona uma rota GET que retorna JSON.

http_server_add_route_json(server, "/health", "{\"ok\":true}")
-- Saída: true

Polling

http_server_poll(server, timeout_ms) → int

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)
http_server_serve_forever(server, poll_timeout_ms) → void

Continua o polling enquanto o servidor estiver rodando - a forma mais simples de "só servir".

http_server_serve_forever(server, 50)

Constantes de status

Constantes de conveniência para códigos de status HTTP comuns:

ConstanteValor
HTTP_STATUS_OK200
HTTP_STATUS_CREATED201
HTTP_STATUS_NO_CONTENT204
HTTP_STATUS_BAD_REQUEST400
HTTP_STATUS_NOT_FOUND404
HTTP_STATUS_INTERNAL_ERROR500

Juntando tudo

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:

Um servidor estático com várias rotas

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:

Um loop de polling personalizado

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