0Pricing
Learn Rust Coding · Ders

Ara Katman

Tower katmanları

Ara Katman, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.

Ara yazılım nedir?

Ara yazılım, istek/yanıt döngüsünü sarmalayarak bir işleyiciden önce ve sonra kod çalıştırır. Günlük kaydı, kimlik doğrulama, sıkıştırma ve zaman aşımı için kullanın.

  • Axum, tower ekosistemi üzerine kuruludur
  • Ara yazılım, katmanlar olarak eklenir

Service özelliği

Tower, bir isteği alan ve eşzamansız olarak yanıt üreten bir yapı olan Service'i tanımlar. Katmanlar, bir hizmeti başka bir hizmetle sarmalar.

Katman ekleme

Ara yazılımı .layer() ile ekleyin. Burada tower_http'ten istek izleme ekliyoruz.

use axum::{Router, routing::get};
use tower_http::trace::TraceLayer;

fn app() -> Router {
    Router::new()
        .route("/", get(|| async { "ok" }))
        .layer(TraceLayer::new_for_http())
}

Katmanların sıralanması

Katmanlar aşağıdan yukarıya doğru sarar: eklenen son katman en dıştaki katmandır. İstekler dıştan içe, yanıtlar içten dışa akar.

use axum::{Router, routing::get};
use tower_http::{trace::TraceLayer, compression::CompressionLayer};

fn app() -> Router {
    Router::new()
        .route("/", get(|| async { "ok" }))
        .layer(CompressionLayer::new())
        .layer(TraceLayer::new_for_http())
}

from_fn ile özel ara yazılım

middleware::from_fn, eşzamansız bir işlevi ara yazılıma dönüştürür. İsteği ve zincirin geri kalanını çağırmak için bir Next alır.

use axum::{middleware::Next, response::Response, extract::Request};

async fn log_mw(req: Request, next: Next) -> Response {
    println!("{} {}", req.method(), req.uri());
    next.run(req).await
}

Özel ara yazılımı bağlama

İşlevinizi from_fn ile sarın ve katman olarak ekleyin.

use axum::{Router, routing::get, middleware};

fn app() -> Router {
    Router::new()
        .route("/", get(|| async { "ok" }))
        .layer(middleware::from_fn(log_mw))
}

İstekleri kısa devre yapma

Ara yazılım, next'i çağırmadan erken yanıt döndürebilir; bu, kimlik doğrulama için kullanışlıdır. Yanıt döndürmek zinciri durdurur.

use axum::{middleware::Next, response::Response, extract::Request, http::StatusCode};

async fn auth(req: Request, next: Next) -> Result<Response, StatusCode> {
    if req.headers().contains_key("authorization") {
        Ok(next.run(req).await)
    } else {
        Err(StatusCode::UNAUTHORIZED)
    }
}

Bir ara yazılım zincirini modelleme

Bir zincir, bir sonraki işlevi çağıran işlevlerden ibarettir. Bu çalıştırılabilir örnek, önce/sonra sarmalamasını modeller.

fn handler() -> String {
    "response".to_string()
}

fn logging<F: Fn() -> String>(next: F) -> String {
    println!("-> request in");
    let res = next();
    println!("<- response out");
    res
}

fn main() {
    let out = logging(handler);
    println!("body: {}", out);
}

Yol başına ara yazılım

Bir katmanı tüm uygulama yerine yöntem yönlendiricisinde .layer() çağırarak tek bir yola uygulayın.

use axum::{Router, routing::get, middleware};

fn app() -> Router {
    Router::new().route(
        "/admin",
        get(|| async { "admin" }).layer(middleware::from_fn(auth)),
    )
}

Yaygın tower_http katmanları

tower_http kasası kullanıma hazır ara yazılımlar sunar:

  • Günlük kaydı için TraceLayer
  • gzip için CompressionLayer
  • CORS için CorsLayer
  • İstek süresini sınırlamak için TimeoutLayer
use tower_http::cors::CorsLayer;

fn cors() -> CorsLayer {
    CorsLayer::permissive()
}

ServiceBuilder ile katmanları birleştirme

Birden çok katmanı, öngörülebilir bir sıralamayla yukarıdan aşağıya uygulayan ServiceBuilder ile düzenli biçimde gruplayın.

use tower::ServiceBuilder;
use tower_http::{trace::TraceLayer, compression::CompressionLayer};

fn stack() -> ServiceBuilder<impl Sized> {
    ServiceBuilder::new()
        .layer(TraceLayer::new_for_http())
        .layer(CompressionLayer::new())
}

Hızlı Kontrol

Ara yazılımla ilgili anlayışınızı sınayın.

Özet

Tower katmanlarıyla ara yazılım kullanmayı öğrendiniz:

  • Ara yazılımı .layer() ile ekleyin; son eklenen en dıştaki katmandır
  • from_fn, Next kullanarak özel ara yazılım oluşturur
  • Örneğin kimlik doğrulamada kısa devre yapmak için erken yanıt döndürün
  • tower_http, izleme, sıkıştırma, CORS ve zaman aşımı katmanları sunar

Axum kursu burada tamamlanıyor.

Sıkça Sorulan Sorular

“Ara Katman” dersi ücretsiz mi?

Evet — “Ara Katman” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.

“Ara Katman” dersinde ne öğreneceğim?

Tower katmanları Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Ara Katman” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Axum Yönlendirmesi
  2. Çıkarıcılar
  3. JSON ve Durum
  4. Ara Katman
← Learn Rust Coding Sayfasına Dön