Files
servme/README.md
T

140 lines
3.3 KiB
Markdown

# Servme
Un framework web HTTP de bajo nivel escrito en Rust, construido sobre Hyper.
## Características
- **Middleware System**: Pipeline extensible para autenticación (JWT, API Key, IP Filter)
- **Builder Pattern**: API fluente para configuración del servidor
- **Graceful Shutdown**: Manejo elegante de señales SIGINT/SIGTERM
- **Error Handling**: Sistema de errores tipado con `ServerError`
- **High Performance**: IP filtering con O(1) lookups usando HashSet
## Uso Básico
```rust
use servme::{ServerBuilder, Responder, UrlExtract};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let server = ServerBuilder::new()
.address("127.0.0.1", 8080)
.handler(|req, res| async {
let url = UrlExtract::new(req.uri());
Responder::ok(format!("Hello, {}!", url.param_str("name").unwrap_or_default()))
})
.build();
server.run().await
}
```
## Middlewares
### API Key Authentication
```rust
use servme::{ServerBuilder, middleware::ApiKeyMiddleware};
let server = ServerBuilder::new()
.address("127.0.0.1", 8080)
.add_api_key_middleware("your-secret-key")
.build();
```
### JWT Authentication
```rust
use servme::{ServerBuilder, middleware::JwtMiddleware};
let server = ServerBuilder::new()
.address("127.0.0.1", 8080)
.add_jwt_middleware("your-secret-key")
.build();
```
### IP Filtering
```rust
use servme::{ServerBuilder, middleware::IpFilterMiddleware};
let server = ServerBuilder::new()
.address("127.0.0.1", 8080)
.add_ip_filter_middleware(
vec!["192.168.1.1".to_string(), "10.0.0.1".to_string()],
true // allow private IPs
)
.build();
```
## Constantes Disponibles
```rust
use servme::constants::{
DEFAULT_HOST, // "127.0.0.1"
DEFAULT_PORT, // 8080
JWT_COOKIE_NAME, // "access_token"
BEARER_PREFIX, // "Bearer "
FILE_EXTENSIONS, // [".json", ".html", ".css", ".js"]
MAX_ALLOWED_IPS, // 1000
};
```
## Responder Helpers
```rust
use servme::Responder;
// JSON response
Responder::json(&data)?;
// Redirect
Responder::redirect("/new-location")?;
// Status codes
Responder::not_found()?;
Responder::unauthorized()?;
Responder::forbidden()?;
Responder::bad_request("error message")?;
Responder::internal_error("error message")?;
```
## Construcción y Tests
```bash
# Build
cargo build
# Run tests
cargo test
# Run with debug logging
RUST_LOG=debug cargo run
```
## Estructura del Proyecto
```
src/
├── lib.rs # Exports públicos
├── main.rs # Binario de ejemplo
├── builder.rs # ServerBuilder
├── config.rs # ServerConfig
├── server.rs # Servidor HTTP con graceful shutdown
├── error.rs # ServerError enum
├── constants.rs # Constantes configurables
├── responder.rs # Helper para construir respuestas
├── requester.rs # Helper para extraer request info
├── url_extract.rs # URL parsing y query params
└── middleware/
├── mod.rs # Traits y tipos comunes
├── api_key.rs # API Key authentication
├── jwt.rs # JWT authentication
├── ip_filter.rs # IP filtering
└── auth_types.rs # Tipos de autenticación
```
## License
MIT