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
SerializetürleriniJsoniçine alın - Genellikle
Arcsaran birClonedurum yapısı tanımlayın with_stateile ekleyin,Stateile okuyun- Değiştirilebilir paylaşılan veriler için
Arc<Mutex>, alt durumlar içinFromRefkullanı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
- Axum Yönlendirmesi
- Çıkarıcılar
- JSON ve Durum
- Ara Katman