İlk HTTP uygulaması
Bir controller tanımlayın, JSON yanıt döndürün ve Lily uygulamanızı çalıştırın.
Bu sayfanın sonunda GET /api/hello isteğine JSON döndüren bir uygulamanız olacak. Örnek yerel HTTP ile çalışır.
Projeyi hazırlayın#
lilyrs 0.1.0 crates.io’da yayımlanmıştır. Framework manifestinin Rust alt sınırı ve doğrulanan toolchain’i 1.96.1, edition’ı 2024’tür. Uygulamanızı bağımsız bir Cargo projesi olarak oluşturun:
cargo new hello-lilyhello-lily/Cargo.toml dosyasını aşağıdaki şekilde düzenleyin:
[package]
name = "hello-lily"
version = "0.1.0"
edition = "2024"
rust-version = "1.96.1"
[dependencies]
lilyrs = { version = "0.1.0", features = ["http-api"] }
serde = { version = "1", features = ["derive"] }lilyrs varsayılan olarak bileşen açmaz. http-api feature’ı HTTP API’sini lilyrs::http_api altında sunar. Controller, middleware, guard ve DI tipleri aynı girişten alınır; HTTP macro, derive veya registry crate’lerini ayrıca kurmanız gerekmez. DI sayfasında servislerin nasıl tanımlandığını göreceğiz.
Entegrasyon eklerken aynı lilyrs satırının feature listesini genişletin: örneğin features = ["http-api", "postgresql"]. Feature adı http-api, Rust modülü ise http_api olarak yazılır. Facade mevcut bileşenleri yeniden export eder; uygulama yaşam döngüsü ve canonical API çağrıları değişmez.
Controller ve uygulama#
src/main.rs dosyasını aşağıdakiyle değiştirin:
use std::sync::Arc;
use lilyrs::http_api::{
controller, AppBuilder, Controller, ControllerInitError, ControllerTrait,
Extensions, HttpApiError,
};
use serde::Serialize;
#[derive(Serialize)]
struct Hello { message: &'static str }
#[derive(Controller)]
#[base_path("/api")]
struct HelloController;
#[lilyrs::http_api::async_trait::async_trait]
impl ControllerTrait for HelloController {
async fn new(_: Arc<Extensions>) -> Result<Self, ControllerInitError> {
Ok(Self)
}
}
#[controller]
impl HelloController {
#[get("/hello")]
async fn hello(&self) -> Result<Hello, HttpApiError> {
Ok(Hello { message: "Merhaba Lily" })
}
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
lilyrs::http_api::tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()?
.block_on(async {
AppBuilder::new("127.0.0.1:8080")
.tls_disabled()
.build().await?
.start().await?;
Ok::<(), Box<dyn std::error::Error>>(())
})
}#[base_path("/api")] controller’ın ortak yoludur. #[get("/hello")] ile birleşince /api/hello oluşur. Result<Hello, HttpApiError> başarılı değeri JSON’a dönüştürür. Controller’lar link sırasında keşfedilir; add_controller çağrısı yoktur.
Çalıştırın#
cd hello-lily
cargo runBaşka bir terminalde:
curl -i http://127.0.0.1:8080/api/helloBaşarılı yanıt 200 durum kodu ve aşağıdaki gövdeyi içerir:
{"message":"Merhaba Lily"}Uygulamayı kapatın#
Ctrl+C sinyali kapanışı başlatır. start().await kapanış işlemleri tamamlandığında döner. Başarılı her build için start veya close yolu tamamlanmalıdır; App değerini bırakmak async temizliğin yerine geçmez.
Tokio tercihi. Örnek, HTTP facade üzerinden runtime kurar.
#[tokio::main]kullanmak isterseniz uygulamanızamacrosve runtime özellikleriyle doğrudantokiobağımlılığı ekleyin.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.