0Pricing
Learn Rust Coding · Ders

JSON ve Durum

Paylaşılan durum ve serileştirme

JSON ve Durum, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 3. 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.

JSON döndürme

Axum, JSON yanıtlarını kolaylaştırır. Herhangi bir Serialize türünü Json içine alın; içerik türünü ayarlar ve gövdeyi serileştirir.

use axum::Json;
use serde::Serialize;

#[derive(Serialize)]
struct User { id: u32, name: String }

async fn get_user() -> Json<User> {
    Json(User { id: 1, name: "Alice".into() })
}

Koleksiyonları serileştirme

Serileştirilebilir öğelerden oluşan bir Vec, JSON dizisine dönüşür. Ek bir işlem gerekmez.

use axum::Json;
use serde::Serialize;

#[derive(Serialize)]
struct Item { id: u32 }

async fn list() -> Json<Vec<Item>> {
    Json(vec![Item { id: 1 }, Item { id: 2 }])
}

JSON'ı yalın Rust ile modelleme

JSON serileştirme, bir yapıyı dizeye dönüştürmekten ibarettir. serde_json ile to_string çağrısını yaparsınız. Burada bu fikri elle oluşturulmuş bir biçim kullanarak gösteriyoruz.

struct User { id: u32, name: String }

fn to_json(u: &User) -> String {
    format!("{{\"id\":{},\"name\":\"{}\"}}", u.id, u.name)
}

fn main() {
    let u = User { id: 1, name: "Alice".to_string() };
    println!("{}", to_json(&u));
}

Paylaşılan durum nedir?

Paylaşılan durum, veritabanı havuzu veya yapılandırma gibi her işleyicinin erişebildiği verilerdir. Axum, bu durumu State çıkarıcısıyla işleyicilere iletir.

Uygulama durumunu tanımlama

Paylaşılan verilerinizi tutan bir yapı tanımlayın. Klonlamanın düşük maliyetli olması için genellikle bir Arc sarmalar.

use std::sync::Arc;

#[derive(Clone)]
struct AppState {
    name: Arc<String>,
}

Yönlendiriciye durum ekleme

Durumu with_state'e geçirin. Axum durumu saklar ve isteyen işleyicilere sağlar.

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

async fn handler() -> &'static str { "ok" }

fn app(state: AppState) -> Router {
    Router::new().route("/", get(handler)).with_state(state)
}

Bir işleyicide durumu okuma

İşleyicinin içinde durumunuzun bir klonunu almak için bir State parametresi ekleyin.

use axum::extract::State;

async fn handler(State(state): State<AppState>) -> String {
    state.name.to_string()
}

Değiştirilebilir paylaşılan durum

Değişen verileri, bir Arc arkasında Mutex gibi bir kilitle koruyun. Bu, eşzamanlı ve güvenli değişikliğe olanak tanır.

use std::sync::{Arc, Mutex};

#[derive(Clone)]
struct Counter {
    count: Arc<Mutex<u32>>,
}

Mutex arkasındaki veriyi değiştirme

Mutex'i kilitleyin, değeri değiştirin; ardından koruyucu serbest bırakılır. Çalıştırılabilir bu örnek, bir işleyicinin gerçekleştireceği artırma işlemini yansıtır.

use std::sync::{Arc, Mutex};

fn main() {
    let count = Arc::new(Mutex::new(0u32));
    {
        let mut guard = count.lock().unwrap();
        *guard += 1;
    }
    println!("count = {}", *count.lock().unwrap());
}

JSON kabul etme ve geri gönderme

Girdi ve çıktı JSON'ını birleştirin: gövdenin serileştirmesini kaldırın, dönüştürün ve JSON döndürün. Oluşturup ardından yanıt verme işlemi yaygın bir kalıptır.

use axum::Json;
use serde::{Serialize, Deserialize};

#[derive(Deserialize)]
struct Input { name: String }
#[derive(Serialize)]
struct Output { greeting: String }

async fn greet(Json(i): Json<Input>) -> Json<Output> {
    Json(Output { greeting: format!("Hi {}", i.name) })
}

FromRef ile alt durum

Durum birden çok parça içerdiğinde, işleyicilerin yalnızca ihtiyaç duydukları parçayı çıkarabilmesi için FromRef türetin.

use axum::extract::FromRef;

#[derive(Clone)]
struct Pool;

#[derive(Clone, FromRef)]
struct AppState {
    pool: Pool,
}

Hızlı Kontrol

JSON ve durumla ilgili anlayışınızı sınayın.

Özet

JSON'ı ve paylaşılan durumu öğrendiniz:

  • Yanıt vermek için Serialize türlerini Json içine alın
  • Genellikle Arc saran bir Clone durum yapısı tanımlayın
  • with_state ile ekleyin, State ile okuyun
  • Değiştirilebilir paylaşılan veriler için Arc<Mutex>, alt durumlar için FromRef kullanın

Sırada: tower katmanlarıyla ara yazılım.

Sıkça Sorulan Sorular

“JSON ve Durum” dersi ücretsiz mi?

Evet — “JSON ve Durum” 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.

“JSON ve Durum” dersinde ne öğreneceğim?

Paylaşılan durum ve serileştirme 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 3. dersidir.

“JSON ve Durum” 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