Creare API REST JSON Rust Actix e Oracle
In questo articolo abbiamo visto come creare una API REST JSON con Rust e Actix.
In quest'altro articolo abbiamo visto comme connetterci ad Oracle.
Adesso facciamo una fusione tra i due; quindi avremo un endpoint che si connetter ad Oracle e ci mostra i risultati in formato JSON.
Le dipendenze che dobbiamo avere sono:
- Actix
- Serde
- driver Oracle
Quindi aggiungete queste al Cargo.toml:
[dependencies]
oracle = "0.3.2"
actix-web = "2.0"
actix-rt = "1.0"
serde = "1.0.106"
Questo il codice Rust:
extern crate oracle;
use actix_web::{web, App, HttpResponse, HttpServer, Result, Responder};
use serde::{Deserialize, Serialize};
use oracle::{Connection};
#[derive(Serialize, Deserialize)]
struct MyObj {
name: String,
}
async fn get_list() -> impl Responder {
let mut vec: Vec = Vec::new();
match Connection::connect("USERNAME", "PWD", "//HOST/DBNAME") {
Ok(conn) => {
let sql = "SELECT * FROM anag_conti WHERE ditagenda = :1 AND fvl = :2";
let rows = conn.query(sql, &[&"XXL", &" "]).unwrap();
for r in rows {
let row = r.unwrap();
let conto: String = row.get("CONTO").unwrap();
vec.push(MyObj { name: conto });
}
return web::Json(vec);
}
Err(_e) => {
vec.push(MyObj { name: _e.to_string()});
return web::Json(vec);
}
};
}
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.service(
web::resource("/test")
.route(web::get().to(get_list))
)
})
.bind("127.0.0.1:8088")?
.run()
.await
}
Enjoy!
rust actix json serde oracle cargo
Commentami!