亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Rust如何使用config配置API

 更新時間:2023年11月14日 12:09:57   作者:涵樹  
這篇文章主要介紹了Rust如何使用config配置API,這里記錄了如何聲明配置類型,讀取配置,通過環(huán)境變量來覆蓋配置值等開發(fā)中常見的動作,需要的朋友可以參考下
在應用開發(fā)中,為了讓程序在不同的環(huán)境下都能過順利運行,我們通常會將一些可變項放到配置文件中。Rust也不例外,在Rust中,我們通常使用config crate來實現配置項的讀取。

這里記錄了如何聲明配置類型,讀取配置,通過環(huán)境變量來覆蓋配置值等開發(fā)中常見的動作。

步驟

安裝依賴

[dependencies]
config = "0.13.1"
serde = { version = "1.0.164", features = ["derive"] }

聲明配置struct

我們雖然可以通過config提供的api,去一個字段一個字段的讀取配置,這種方式顯然不安全。

安全的做法是聲明一個強類型,然后讓config幫我們進行反序列化處理,如果字段有錯,會直接報config::ConfigError 。從而避免讓配置錯誤成為漏網之魚,去干擾后面的正常邏輯。

models.rs

use serde::Deserialize;
#[derive(Debug, Default, Deserialize)]
pub struct AppConfig {
    pub server_addr: String,
    pub port: u16,
    pub redis_addr: String,
    pub redis_port: u16,
    pub route_mapping: Vec<RouteMapping>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct RouteMapping {
    pub prefix: String,
    pub target: String,
}

serde::Deserialize幾乎成了Rust生態(tài)中的序列化和反序列化的標準,只有讓我們的類型實現serde::Deserialize trait,config才能為我們從配置文件中反序列化。

創(chuàng)建配置文件

配置文件一般放在項目的根目錄中,我們這里命名為config.toml。

server_addr="0.0.0.0"
port=8000
redis_addr="redis-token"
redis_port=6379
[[route_mapping]]
prefix="/api/notes/"
target="notes-api"

注意,route_mapping這里是列表的形式。

添加配置項加載代碼

完成了上面的準備工作,我們就可以通過下面的代碼讀取配置數據了。

mod models;
use config::{Config, File};
use models::AppConfig;
fn main() -> _ { 
   let config_ = Config::builder()
        .add_source(File::with_name("config.toml"))
        .build()
        .expect("構建配置錯誤");
    let config: AppConfig = config_.try_deserialize().expect("反序列化配置文件錯誤");
    println!("server_addr:{}", config.server_addr);
    ...
}

上面代碼中的錯誤未作處理,錯誤處理和當前上下文有關,可以參考我的《Rust-錯誤處理魔法》。

添加環(huán)境變量

到目前為止,我們完成了從聲明配置項到讀取配置數據的過程。但是,在實際開發(fā)中,由于環(huán)境的原因,我們需要根據不同的運行環(huán)境來調整某些配置項。

比如上面的redis_addr,我們在開發(fā)的時候,它的值是redis-token,可能部署到生產環(huán)境后,這個值就變成其它的了。但是,如果每次切換環(huán)境都去改這個值,顯然是很不方便且容易出錯的。

最簡單的方式是通過環(huán)境變量來覆蓋對應的值,幸運的是config為我們提供了這個功能。代碼調整如下:

mod models;
use config::{Config, Environment, File};
use models::AppConfig;
fn main() -> _ { 
   let config_ = Config::builder()
        .add_source(File::with_name("config.toml"))
        .add_source(Environment::with_prefix("api-gate"))
        .build()
        .expect("構建配置錯誤");
    let config: AppConfig = config_.try_deserialize().expect("反序列化配置文件錯誤");
    println!("server_addr:{}", config.server_addr);
    ...
}

config會為我們用環(huán)境變量前綴為api-gate的值,去覆蓋從config.toml中讀取的值。

以上面的redis_addr為例,執(zhí)行代碼如下:

export api-gate_redis_addr=192.168.3.175
cargo run

總結

我們通過config crate來讀取配置。先要聲明配置對應的類型(struct),然后通過反序列化的方式來讀取配置的數據。這是一種安全的方式。

我們還可以通過環(huán)境變量來動態(tài)修改配置的值。這一點使得我們的應用在部署時更加靈活,也更加專業(yè)。

到此這篇關于Rust-使用config配置你的API的文章就介紹到這了,更多相關Rust使用config配置api內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Rust讀取配置文件的實現步驟

    Rust讀取配置文件的實現步驟

    任何項目都離不開對于配置文件的讀取和解析,rust項目也一樣,本文主要介紹了Rust讀取配置文件的實現步驟,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • 解析Rust?struct?中的生命周期

    解析Rust?struct?中的生命周期

    rust?的生命周期保證了內存的安全性,同時也增加了開發(fā)者的心智負擔。是在上線之前多費心思寫代碼,還是在上線以后忙忙活活查問題,這是個?trade?off?問題,這篇文章主要介紹了Rust?struct?中的生命周期,需要的朋友可以參考下
    2022-10-10
  • Rust 智能指針實現方法

    Rust 智能指針實現方法

    這篇文章主要介紹了Rust 智能指針的實現方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • 使用Rust采集天氣預報信息并實現實時更新數據功能

    使用Rust采集天氣預報信息并實現實時更新數據功能

    Rust作為一種高效、安全的編程語言,可以用于開發(fā)各種應用,包括天氣預報采集系統(tǒng),本文將探討如何使用Rust來采集天氣預報信息,并實現實時更新數據的功能,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Rust中不可變變量與const的區(qū)別詳解

    Rust中不可變變量與const的區(qū)別詳解

    Rust作者認為變量默認應該是immutable,即聲明后不能被改變的變量,這一點是讓跨語言學習者覺得很別扭,不過這一點小的改變帶來了諸多好處,本節(jié)我們來學習Rust中不可變變量與const的區(qū)別,需要的朋友可以參考下
    2024-02-02
  • 使用Cargo工具高效創(chuàng)建Rust項目

    使用Cargo工具高效創(chuàng)建Rust項目

    這篇文章主要介紹了使用Cargo工具高效創(chuàng)建Rust項目,本文有關Cargo工具的使用和Rust輸入輸出知識感興趣的朋友一起看看吧
    2022-08-08
  • 詳解Rust中的workspace

    詳解Rust中的workspace

    這篇文章主要向大家介紹Rust中的workspace,主要內容包括基礎應用、實用技巧、原理機制等方面,這個概念在Rust中是通用的,只不過maven換成了cargo,而模塊變成了crate,下面跟著小編通過一個例子給大家介紹下
    2022-03-03
  • 在Rust中編寫自定義Error的詳細代碼

    在Rust中編寫自定義Error的詳細代碼

    Result<T, E> 類型可以方便地用于錯誤傳導,Result<T, E>是模板類型,實例化后可以是各種類型,但 Rust 要求傳導的 Result 中的 E 是相同類型的,所以我們需要編寫自己的 Error 類型,本文給大家介紹了在Rust中編寫自定義Error的詳細代碼,需要的朋友可以參考下
    2024-01-01
  • Rust用宏實現參數可變的函數的實現示例

    Rust用宏實現參數可變的函數的實現示例

    本文主要介紹了Rust用宏實現參數可變的函數的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03
  • RUST異步流處理方法詳細講解

    RUST異步流處理方法詳細講解

    這篇文章主要介紹了RUST異步流處理方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12

最新評論