Creare API REST JSON Rust Actix e Oracle

Mattepuffo's logo
Creare API REST JSON Rust Actix e Oracle

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!


Condividi

Commentami!