Bases de Datos al
Servidor Web
API
Persistencia
Recibe solicitudes de los clientes y las redirecciona a las instancias del API
Maneja la solicitud consultando los recursos necesarios para ofrecer una respuesta
Mantiene los datos almacenados de manera persistente entre ejecuciones
Ponga su base de datos aquí
Servidor Web
API
Capa de Acceso a Datos
Almacenamientode Datos
No mutuamente excluyentes
ORM y Query Builder seguro y extensible para Rust
Versión 0.11:
users::table.load(&connection)
SELECT * FROM users;
Rust
SQL
Post::belonging_to(user)
.load(&connection)
SELECT * FROM posts
WHERE user_id = 1;
Rust
SQL
let versions = Version::belonging_to(krate)
.select(id)
.order(num.desc())
.limit(5);
let downloads = try!(version_downloads
.filter(date.gt(now - 90.days()))
.filter(version_id.eq(any(versions)))
.order(date)
.load::<Download>(&conn));
Rust
SELECT version_downloads.*
WHERE date > (NOW() - '90 days')
AND version_id = ANY(
SELECT id FROM versions
WHERE crate_id = 1
ORDER BY num DESC
LIMIT 5
)
ORDER BY date
SQL
#[derive(Queryable)]
pub struct Download {
id: i32,
version_id: i32,
downloads: i32,
counted: i32,
date: SystemTime,
}
Rust
#[derive(Insertable)]
#[table_name="downloads"]
pub struct NewDownload {
version_id: i32,
downloads: i32,
counted: i32,
date: SystemTime,
}
Rust
let new_downloads = vec![
NewDownload { ... },
NewDownload { ... },
];
insert(&new_downloads)
.into(downloads::table)
.execute(&connection);
Rust
INSERT INTO downloads (...) VALUES
...
SQL
post.published = true;
post.save_changes(&connection);
Un objeto
update(Settings::belonging_to(current_user))
.set(&settings_form)
.execute(&connection)
Varios campos en un struct
update(users.filter(email.like("%@a.bc")))
.set(banned.eq(true))
.execute(&connection)
Un grupo de objetos
[dependencies]
diesel = { version = "0.11.0", features = ["postgres"] }
diesel_codegen = { version = "0.11.0", features = ["postgres"] }
dotenv = "0.8.0"
Diesel 0.11 requiere Rust 1.15 o superior
$ rustup update stable
Cargo.toml
CLI
$ cargo install diesel_cli