lilydocs
HTTP APIWebSocketConsumer
Başlangıç2 dk okuma

İ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:

Terminal
cargo new hello-lily

hello-lily/Cargo.toml dosyasını aşağıdaki şekilde düzenleyin:

TOML
[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:

first_app.rs
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#

Terminal
cd hello-lily
cargo run

Başka bir terminalde:

Terminal
curl -i http://127.0.0.1:8080/api/hello

Başarılı yanıt 200 durum kodu ve aşağıdaki gövdeyi içerir:

JSON
{"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ıza macros ve runtime özellikleriyle doğrudan tokio bağımlılığı ekleyin.

Bu sayfanın kaynakları v0.1.0

Anlatım, incelenen framework commit’ine dayanır.

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod