| CARVIEW |
Rust??Actix Web?œ??e?A?v???̈ꗗ??ʂ??J?????悤?FWeb?A?v???????Ŋw?ԁA????Ŗ𗧂?Rust????i2?j
???琔??ɕ????āARust??Web?A?v???t???[?????[?N?ł???Actix Web???Љ?܂??B??ނ́A?V???v???ȓ??e?A?v???ł??B????́A???e?A?v???̊?{?`???쐬???AActix Web?ł̃??[?e?B???O??n???h???[???̏??????𗝉????Ĉꗗ?\???@?\?܂Ŏ??????Ă݂܂??B
???̋L???͉??????ł??B????o?^?i?????j????ƑS?Ă????????????܂??B
?A?ځFWeb?A?v???????Ŋw?ԁA????Ŗ𗧂?Rust????
?@?{?A?ڂ̃T???v???R?[?h??GitHub?Ō??J???Ă??܂??B??????????_?E?????[?h???Ă݂Ă????????B
Actix Web?Ƃ?
?@????̃e?[?}?́AActix Web?ł??BActix Web?́A?ߔN?l?C?}?㏸????Web?A?v???P?[?V?????t???[?????[?N?ł??B?????T?C?g?ɂ??ƁA?ȉ??̂悤?ȓ?????????Ƃ???Ă??܂??B
- ?^???S?F???N?G?X?g??X?|???X?̂قƂ?ǂɌ^??????A???S?ɊJ???ł???
- ?@?\???L?x?FHTTP/2??M???O?Ȃǂ??W???ŃT?|?[?g?????
- ?@?\?g?????\?F?Ǝ??̃??C?u???????쐬????Actix Web?ŗ??p?ł???
- ???ɍ????F?l?C?e?B?u?R???p?C???????Rust?Ȃ?ł͂̍???????????
?@Actix Web?ł́AURL?p?^?[???Ɋ?Â????[?e?B???O???[???̎w??ƁA?Ή?????n???h???[?̍쐬????{?ƂȂ??Ă??܂??B??????Web?A?v???P?[?V?????t???[?????[?N?Ŏ???????Ă????@?Ȃ̂ŁAActix Web?ł̊J???ɂ?????Ȃ?Ɠ????Ă?????ł??傤?B???̑??A?t?H?[???f?[?^??N?G???p?????[?^?[?Ȃǃ??N?G?X?g?p?????[?^?[?̎??o????A???X?|???X?f?[?^?̐??????_??Ɏ??{?ł???ȂǁA?V???v???ȃR?[?h?ő????̂??Ƃ??ł???悤?ɐv????Ă??܂??B
?@Actix Web?ɂ́A?L?x?ȃT???v?????p?ӂ???Ă??܂?????A?uactix/examples: Community showcase and examples of Actix ecosystem usage.?v????Q?Ƃ??Ă݂Ă????????B
?@?ȍ~?ŁAActix Web???g???????e?A?v?????쐬???Ă????܂??i?}1?j?B?Ȃ??A?{?A?ڂ̌㔼?Ńt?????g?G???h???[???????Ă????̂ŁA????쐬????̂̓y?[?W?J?ڂ??I?[?\?h?b?N?X?ȃT?[?o?T?C?h?A?v???ƂȂ??Ă??܂??BActix Web??Web?T?C?g???ǂ????̂??A????????????????????K???ł??B
?A?v????{?`?̍쐬
?@?ŏ??ɁAActix Web?A?v???̊?{?`???쐬???A?A?v???̊?{?\???????Ă????܂??傤?B?Ȃ??AActix Web?̗??p?ɂ́ARust 1.39?ȍ~???K?v?ł??B??1??̎菇?Ńo?[?W???????m?F???āA?Â??o?[?W???????C???X?g?[??????Ă???ꍇ?ɂ́A?A?b?v?f?[?g???Ă????܂??B
?v???W?F?N?g???쐬????
?@?v???W?F?N?g??cargo new?R?}???h?ō쐬???܂??B?A?v????{?`?̃v???W?F?N?g???́Aactix-sample?Ƃ??܂??B
% cargo new actix-sample
?@?v???W?F?N?g?t?H???_?Ɉړ????āA?O???N???[?gactix-web??actix-rt???ˑ??W?Ƃ???cargo add?R?}???h?Ńv???W?F?N?g?ɒlj????܂??Bactix-web??Actix Web?̖{?́Aactix-rt??Tokio?iRust?p?̔??????^?C???j?x?[?X?̔??????^?C???ł??B
% cd actix-sample % cargo add actix-web actix-rt
?@???ʂ́ACargo.toml?t?@?C???ɔ??f?????̂Ŋm?F???Ă????܂??B????ŁA?A?v???̏????͂ł??܂????B
?c???c [dependencies] actix-rt = "2.9.0" actix-web = "4.4.0"
Web?A?v???̃R?[?h???L?q???Ď??s????
?@?쐬?????v???W?F?N?g?ɂ?"Hello, world!"??\??????R?[?h???u????Ă??邾???Ȃ̂ŁA??????폜???ă??X?g1?̃R?[?h?Œu???????܂??B????́Alocalhost?̃|?[?g8000??HTTP???N?G?X?g??҂??āAURL?p?X?Ƀ??[?g?u/?v???w?肳?ꂽ??"Hello, Actix Web!"?ƕԂ??????̃R?[?h?ɂȂ?܂??B
use std::io::Result;
use actix_web::{App, HttpServer, Responder, HttpResponse, get};
#[get("/")] (1)
async fn index() -> impl Responder { (2)
HttpResponse::Ok().body("Hello, Actix Web!") (3)
}
#[actix_rt::main] (4)
async fn main() -> Result<()> { (5)
HttpServer::new(|| { (6)
App::new()
.service(index)
})
.bind("127.0.0.1:8000")?.run().await (7)
}
?@cargo run?R?}???h?Ńr???h???Ď??s???܂??B?G???[?̂Ȃ????Ƃ??m?F???āAWeb?u???E?U?Łuhttps://localhost:8000/?v???J???Ă݂܂??B?}2?̂悤?ɕ\???????A?v????{?`?̍쐬?͐????ł??B
Web?A?v???̃R?[?h??ǂ?ł݂?
?@???X?g1?̓V???v???ȃR?[?h?ł????AActix Web?𗘗p???邽?߂̊?{?I?ȃ??[???????ڂł??B?܂??A?d?v?Ȃ̂̓??[?e?B???O???[???ƃn???h???[???ł??BActix Web?ł́A???N?G?X?g???ꂽHTTP???\?b?h??URL?p?^?[???ƃn???h???[???̑Ή???ێ????Ă??āA??v????????Ăяo???Ƃ????̂???{?ł??i?}3?j?B????܂??āA???X?????Ȃ?܂??????ԂɌ??Ă????܂??傤?B
?@?i1?j?́A???[?e?B???O???[?????w?肷?钍?߂ł??B?????????AHTTP???\?b?h??GET?AURL?p?X?????[?g?u/?v?ł???ꍇ?ɌĂяo?????n???h???[???ł??邱?Ƃ????܂??B???[?e?B???O???[???̎w????@?ɂ́A???߂̑??Ɋ???̕??@?ƃp?^?[????????܂????A????ȍ~?œ??e?A?v?????g?????Ȃ??珇???Љ?Ă????܂??B
?@?i2?j?̓n???h???[???̒?`?ł???Aasync?L?[???[?h???t??????Ă???ʂ?????ƂȂ?܂??BActix Web???????????T?|?[?g????̂ŁA???̂悤??async??t???邾???Ŕ????ƂȂ?܂??B?߂?l??impl Responder?́AResponder?g???C?g???????????^?̒l??߂??A?Ƃ????Ӗ??ɂȂ?܂??B
?@?i3?j?????̖߂?l?ł??BHttpResponse?́AResponder?g???C?g???????????\???̂ł??BHTTP???X?|???X???AHTTP?X?e?[?^?XOK?iOk???\?b?h?j?Ń??X?|???X?{?f?B?[?ibody???\?b?h?j??"Hello, Actix Web!"?Ƃ??Ė߂??A?Ƃ????Ӗ??ɂȂ?܂??Bbody???\?b?h???Ԃ??̂͂????܂ł????X?|???X?{?f?B?[?ł???AHTML??
?^?O?Ƃ͖??W?Ȃ̂Œ??ӂ??Ă????????B?Ȃ??A???̗??index???͈????????܂??A?Ⴆ?Έ?????HttpRequest?̃C???X?^???X??n???ƁA???N?G?X?g?p?????[?^?[?Ȃǂɉ????????????\?ł??B???̂???????A????ȍ~?ŏЉ?Ă????܂??B?@?i4?j?́Amain????actix-rt?ɂ???Ď??s?????????ł??邱?Ƃ????????߂ł??BActix Web?????ڌĂяo?????ɂ͂??̒??߂??K?v?ł??B
?@?i5?j?͂???main???ł????A?????Ƃ??邽?߂ɂ??????async?L?[???[?h??t?????܂??B?߂?l??std::io::Result?́A?i7?j?ŌĂяo???Ă???bind???\?b?h?̃G???[???Ăяo?????ɈϏ????邽?߂ł??Bbind???\?b?h?̌Ăяo???Ɂu??v???t???Ă??邱?Ƃɒ??ӂ??Ă????????B
?@?i6?j????́AHTTP?T?[?o?ł???HttpServer?̃C???X?^???X?????A?ҋ@????IP?A?h???X?ƃ|?[?g?̎w??ibind???\?b?h?j?A?T?[?o?̊J?n?irun???\?b?h?j?ƂȂ?܂??B?Ō??await?͔??Ăяo???Ƃ???w??ł??B
?@HttpServer?̃R???X?g???N?^?ɓn???Ă???App?I?u?W?F?N?g?́A?????ʂ?Web?A?v???P?[?V?????̂??߂̃I?u?W?F?N?g?ł???A???̏ꍇ?͐??????service???\?b?h??index????o?^????A?Ƃ????Ӗ??ɂȂ?܂??B?A?v???P?[?V?????ɐV???ȃ??[?g??o?^????ꍇ?ɂ́Aservice???\?b?h?????\?b?h?`?F?[???łȂ??ł????܂??B?Ȃ??A???[?g?̓o?^?ɂ???????@??????̂ŁA???????????ȍ~?ŏ????Љ?Ă????܂??B
?y?⑫?zRust??async??await
?@Rust?ɂ?????await??async???A???̃v???O???~???O????ɂ????邻??Ɩ????I?ɂ͓????ł??B???Ŏ??s??????????u???b?N??async?ŏC?????Aawait?Ŕ??ɌĂяo???܂??BRust?̔???????Future?g???C?g?Ɋ?Â??Ă???Aasync??await???L?q???邾???ŁA?R???p?C?????????I??Future?g???C?g??????u???b?N?Ɏ??????܂??B?Ȃ??A?????????T?|?[?g???鑽???̃v???O???~???O????ƈقȂ?Aawait?̓v???p?e?B?̂悤?ɋL?q?????u?^?ƂȂ??Ă??܂??B????ɂ??A???\?b?h?`?F?[???̒??ɋL?q???ĔC?ӂ̃^?C?~???O?ŏ????҂??????邱?Ƃ??\?ƂȂ??Ă??܂??B
?y?⑫?z?N???[?W??
?@???X?g1?́i6?j?ɂ????āAHttpServer?̃R???X?g???N?^?????ɓn????Ă???̂́A?N???[?W???ł??B?N???[?W???Ƃ͂????閳?????̂??ƂŁA?u|????| {???{??}?v?̂悤?Ȍ`?ŋL?q???܂??B???̏ꍇ?͈??????Ȃ??̂Łu||?v?ƂȂ??Ă??܂??B?_???a?̉??Z?q?Ɠ????Ɍ????Ă??܂??̂ł????A???ӂ??Ȃ??Ƃ????_?Ō??????܂??傤?B
?@Actix Web?̃A?v???̊?{?`?́A???[?e?B???O???[???̓o?^?ƁA?Ăяo?????n???h???[???̒?`?ł??邱?Ƃ????????Ă????܂??傤?B
???e?A?v???̍쐬
?@????????Aactix-sample?????Ƃɂ??????e?A?v?????\?z???Ă????܂??Bactix-posts?v???W?F?N?g??V???ɍ쐬???Aactix-web?N???[?g??actix-rt?N???[?g???v???W?F?N?g?̈ˑ??W?ɉ????āAsrc/main.rs?t?@?C????actix-sample????R?s?[???Ă????Ă????????B?ȍ~?Aactix-posts?ɃJ?????g?t?H???_???ړ????????̂Ƃ??ĉ????i?߂܂??B
???K?[?????????Ă???
?@?g???u???V???[?e?B???O?ɔ????āA???K?[?????炩???ߑg?ݍ???ł????܂??傤?B???K?[?Ƃ??ẮARust?̕W???I?ȃ??K?[?ł???log?ƁAActix Web?Ƀ~?h???E?F?A?Ƃ??ėp?ӂ???Ă???Logger???g???܂??B???????g?????߂ɁAlog?N???[?g?Aenv_logger?N???[?g???ȉ??̃R?}???h?Ńv???W?F?N?g?̈ˑ??W?ɉ????Ă????????B
% cargo add log env_logger
?@?????āAsrc/main.rs?t?@?C???Ƀ??X?g2?̂悤??use????ύX?A?lj????Amain???ɃR?[?h??NjL???܂??B
?c???c
use actix_web::{App, HttpServer, Responder, HttpResponse, get,
middleware::Logger};
use env_logger::Env;
?c???c
#[actix_rt::main]
async fn main() -> Result<()> {
env_logger::init_from_env(Env::default().default_filter_or("info")); (1)
HttpServer::new(|| {
App::new()
.service(index)
.wrap(Logger::default()) (2)
})
.bind("127.0.0.1:8000")?.run().await
}
?@?i1?j?̓??K?[?̐ݒ?ŁA?f?t?H???g?̃??O???x???̎w??ł??B???O???x???Ƃ́A?d?v?x??p?r?ɉ????????O?o?͂̊?ŁARust??log?N???[?g?ł͏d?v?x?̍???????error?Awarn?Ainfo?Adebug?Atrace??5?i?K???w??ł??܂??B?????ł́A??ʓI?ȏ??ɑ???????info???w?肵?Ă??܂??B
?@?i2?j??wrap???\?b?h?́ALogger?~?h???E?F?A???A?v???P?[?V?????ɒlj????܂??B???̒lj????@???ƁA?S?Ẵ??N?G?X?g?ɑ??ă??O?o?͂??K?p????܂??B
?@?A?v???ւ̈?ʂ?̎??????I?????????_?ŁAURL?p?X?u/posts?v??Web?u???E?U????A?N?Z?X????ƁA?ȉ??̂悤?Ƀ??O???^?[?~?i???ɏo?͂???܂??B
[2023-10-14T23:14:26Z INFO actix_server::builder] starting 16 workers [2023-10-14T23:14:26Z INFO actix_server::server] Actix runtime found; starting in Actix runtime [2023-10-14T23:14:34Z INFO actix_posts::handler] Called index (1) [2023-10-14T23:14:34Z INFO actix_web::middleware::logger] 127.0.0.1 "GET /posts HTTP/1.1" 200 1353 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" 0.001263 (2)
?@?i1?j?̓n???h???[?????ŔC?ӂŏo?͂??Ă??镶????A?i2?j?̓??N?G?X?g?̏????I???ɂ???Ď????ŏo?͂????s?ł??B???N?G?X?g?????y?[?W?????[?e?B???O???[???̂?????ɂ??}?b?`???Ȃ??Ɓi1?j?i2?j?͏o?͂???܂??A?i1?j?̃n???h???[???Ɓi2?j??"GET /posts HTTP/1.1"???????z?肵???Ή??ƈقȂ??Ă??邩??????܂???B???[?e?B???O???[????lj???????ҏW?????肵?????A?v???悤?Ƀn???h???[?????Ăяo????Ȃ??Ƃ????ꍇ?ɂ́A???̂悤?Ƀ??O?????p???Ċm?F???܂??傤?B
?w?b?_?ƃt?b?^???쐬???Ă???
?@?S?Ẵy?[?W?ɕ\???????w?b?_?ƃt?b?^???A???ʃR???e???c?Ƃ??Ă??炩???ߏ??????Ă????A?e?y?[?W?̐??????Ɏ?荞?ނ悤?ɂ??܂??B????ɂ??A?n???h???[???ɋ??ʕ???????R?[?h?𒀈ꏑ???Ȃ??ōς݂܂????A?y?[?W?f?U?C???̓??ꂪ?e?ՂɂȂ?܂??B
?@?w?b?_?iheader.html?j?̓??e??
?^?O?ƃA?v???̃^?C?g???A?t?b?^?ifooter.html?j?̓??e?͒??쌠?̏??ł??B?f?U?C???̒??????e?ՂɂȂ?悤?ɁAWeb?f?U?C???t???[?????[?NBootstrap??g?ݍ???ł??܂??B?@?t?@?C???́A?v???W?F?N?g???[?g??static?t?H???_???쐬???āA?\?[?X?t?@?C???Ƃ͕ʂɔz?u???܂??B?Ȃ??A?????̃t?@?C???͎????œK?p?????킯?ł͂Ȃ??A?n???h???[?????t?@?C????ǂݍ??݁A?R???e???c?̈ꕔ?Ƃ??ė??p????Ƃ??????Ƃɒ??ӂ??Ă????????i?}4?j?B?t?@?C?????e?̌f?ڂ͊??????܂??̂ŁA?z?z?T???v?????Q?Ƃ??Ă????????B
?ꗗ?\???̃n???h???[????p?ӂ???
?@?܂??́A?S???e???ꗗ?\??????n???h???[???????????Ă݂܂??傤?BWeb?A?v???ɂǂ̂悤?ȏ?????p?ӂ??邩?ɂ????܂????A?n???h???[???͐????????Ȃ?̂???ʓI?Ȃ̂ŁA?ώG????????邽?߂ɕʃN???[?g???쐬???Ĕz?u???邱?Ƃɂ??܂??B?v???W?F?N?g??src?t?H???_?ɐV????handler.rs?t?@?C?????쐬???A?????Ɉꗗ?\???̃n???h???[??index??main.rs?t?@?C??????ړ??A???X?g3?̂悤?ɏ????????܂??B
use log::info;
use actix_web::{Responder, HttpResponse, web, get, post};
#[get("/posts")] (1)
pub async fn index() -> impl Responder { (2)
info!("Called index"); (3)
HttpResponse::Ok().body("Called index") (4)
}
?@?i1?j?̓??[?e?B???O???[???̕ύX?ł??B?S???e?̈ꗗ?\???́AURL?p?X?u/posts?v?Ƃ??܂??i???̃??[?e?B???O???[???ƃn???h???[???́A????ɉ??߂ďЉ?܂??j?B?i2?j??main?N???[?g????Q?Ƃł???悤??pub?L?[???[?h?????ɕt?????Ă??܂??B?i3?j??info???x???Ńn???h???[?????Ăяo???ꂽ???Ƃ????????O?o?͂ł??B?i4?j?͉??̃R???e???c?ŁAindex?????Ăꂽ???Ƃ?Ԃ??????̂??̂ƂȂ??Ă??܂??B???ۂ̈ꗗ?\???́A???ƂŃR?[?h?̐????ƂƂ??ɏЉ?܂??B
?n???h???[????o?^????
?@?쐬?????n???h???[?????A?A?v???P?[?V?????ɓo?^????R?[?h?????X?g4?̂悤?ɒNjL?A?C?????܂??B
?c???c
mod handler; (1)
?c???c
App::new()
.service(handler::index) (2)
.wrap(Logger::default())
?c???c
?@?i1?j?́Ahandler.rs?t?@?C?????̊????Ăяo?????߂ɕK?v??mod???ł??B????ɂ??A?i2?j?̂悤??handler.rs?t?@?C???Œ?`????????service???\?b?h?ɗ^???邱?Ƃ??ł??܂??B
?@?????ŃA?v???P?[?V???????r???h?A???s???AWeb?u???E?U?Łuhttps://localhost:8000/posts?v???J???Ă݂܂??B?}5?̂悤?ɕ\?????????[?g?̕ύX??N???[?g?̕????͐????ł??B
?f?[?^?\?[?X?ƃf?[?^?????N???[?g??p?ӂ???
?@???e?A?v???̃f?[?^?\?[?X?́A?{???ł????SQLite??MySQL?Ȃǂ̃f?[?^?x?[?X???g???????Ƃ???ł????A?????Actix Web?̎g?????ɏW?????邽?߁A?ÓI??JSON?f?[?^?t?@?C??data.json??p?ӂ??āA??????Q?ƁA?X?V????Ƃ????悤?Ɋȗ??????܂??B?t?@?C?????e?̌f?ڂ͊???????̂ŁA?z?z?T???v?????Q?Ƃ??Ă????????i?S?????????e??data_base.json?t?@?C?????܂߂Ă???̂ŁA???e?̕????ɗ??p?ł??܂??j?B?Ȃ??ARust?ɂ?????f?[?^?x?[?X?̗??p?ɂ??ẮA?{?A?ڂ̌㔼?ŏЉ??\??ł??B
?@?f?[?^?\?[?X?̃R?[?h???A?ʃN???[?g?Ƃ??܂??Bsrc?t?H???_??handler?t?H???_???쐬???Ahandler?̉??ʃ??W???[???Ƃ???data.rs?t?@?C???????X?g5?̓??e?Ŕz?u???܂??B
use std::fs;
use serde::{Serialize, Deserialize}; (1)
#[derive(Serialize, Deserialize, Debug, Clone)] (2)
pub struct Message {
pub id: i32, // ID
pub posted: String, // ???e????
pub sender: String, // ???e?Җ?
pub content: String, // ???e???e
}
static DATA_FILENAME: &str = "data.json"; (3)
pub fn get_all() -> Vec<Message> { (4)
let file = fs::read_to_string(DATA_FILENAME).unwrap();
let mut json_data: Vec<Message> = serde_json::from_str(&file).unwrap();
json_data.sort_by(|a, b| b.posted.cmp(&a.posted));
json_data
}
?@????́AJSON?t?@?C?????f?[?^?\?[?X?Ƃ??Ďg???ꍇ?̍ŏ??\???ƂȂ??Ă??܂??B???Ƃ??ẮA?S???e?f?[?^???擾????get_all???݂̂????????Ă??܂??B
?@?i1?j??serde?N???[?g?̍\???̂??g??use???ł??Bserde?́ARust?ɂ?????JSON?f?[?^???g???ۂ̒?ԃN???[?g?iJSON SerDe???C?u?????j?ŁA?i2?j?̂悤?ɍ\???̂𒍎߂??ăV???A???C?Y?iSerialize?j??f?V???A???C?Y?iDeserialize?j?Ȃǂ̋@?\????܂??i?????ł͍\???̂̃N???[?????\?ɂ???Clone???w?肵?Ă??܂??j?B?Ȃ??A?i2?j?͓??e?f?[?^?\????Message?̒?`?ł???Apub?L?[???[?h??t?L???ď?ʃ??W???[??????Q?Ƃł???悤?ɂ??Ă??܂??B?e?t?B?[???h?̖????̓R?????g???Q?Ƃ??Ă????????B
?@?i3?j?́A?f?[?^?t?@?C???̖??O??ÓI?????e?????Ƃ??Ē?`???Ă??܂??B
?@?i4?j?́A?S???e?f?[?^???擾??????{?̂ł??B?t?@?C??????ǂݍ???JSON????????Aserde_json::from_str???\?b?h??Message?^?̃x?N?^?[?Ƃ??Ď擾???܂??B???̍ۂɁAserde?ɂ??f?V???A???C?Y?????s????Ă??܂??B?????āAsort_by???\?b?h?œ??e?????̍~???ŕ??ёւ??āA???̖߂?l?Ƃ??Ă??܂??B
?@?????ŁAdata.rs?t?@?C???Ŏg?p????serde?N???[?g??serde_json?N???[?g???A?v???W?F?N?g?̈ˑ??W?Ɉȉ??̃R?}???h?Œlj????Ă????????B?܂??A?lj????Cargo.toml?t?@?C???iserde?s?j???Aderive???߂??g?????߂Ƀ??X?g6?̂悤?ɏC?????Ă????????B
% cargo add serde serde_json
[dependencies]
?c???c
serde = {version = "1.0.188", features = ["derive"] }
serde_json = "1.0.107"
?ꗗ?\???̃n???h???[????????????
?@?????ŁA?n???h???[????S???e?f?[?^?̎擾?ƕ\???ɑΉ????????̂ɏC?????܂??Bhandler.rs?t?@?C????index???????X?g7?̂悤?ɏC?????܂??B
?c???c
mod data; (1)
#[get("/posts")]
pub async fn index() -> impl Responder {
let posts = data::get_all(); (2)
let mut body_str: String = "".to_string(); (3)
body_str += include_str!("../static/header.html");
for item in &posts { (4)
body_str += &format!("<div><a href=\"/posts/{}\">", item.id);
body_str += &format!("<div>{} {}</div>", item.sender, item.posted);
body_str += &format!("<div><p>{}</p></div>",
item.content.replace("\n", "<br />"));
body_str += "</a></div>";
}
body_str += "<div><a href=\"/posts/new\">?쐬</a></div>";
body_str += include_str!("../static/footer.html");
HttpResponse::Ok().content_type("text/html; charset=utf-8").body(body_str) (5)
}
?c???c
?@???X?g7?̐????ł??B???̃R?[?h?̏??????e?́A?w?b?_??t?b?^?̃t?@?C???Ǝ擾?????S???e?f?[?^????HTML?????邱?Ƃł??B
?@?i1?j?́A?f?[?^?\?[?X?̃??W???[???ł???data?̎?荞?݂̎w??ł??B
?@?i2?j?ł́A???݂̑S???e?f?[?^??Message?^?̃x?N?^?[?Ŏ擾???Ă??܂??B
?@?i3?j????́A???X?|???X?{?f?B?[?Ƃ??镶??????쐬???Ă??܂??B???炩???ߗp?ӂ???HTML?t?@?C?????Ainclude_str!?}?N???œǂݍ???ŕ?????ɒlj????Ă????܂??B???̃}?N???́A?????Ŏw?肳???t?@?C???̓??e???u&'static str?v?Ƃ??Ă??̏?ɓW?J???܂??B????ɂ??A?O???̃t?@?C?????R?[?h?ɖ??ߍ??ނ??Ƃ??ł??܂??B
?@?i4?j?ł́A?i3?j?̏????̈ꕔ?ł????\?????ׂ????e?f?[?^??for???Ń??X?|???X?{?f?B?[??????ɒlj????Ă??܂??B???̂Ƃ??A?ڍ׃y?[?W?i/posts/{id}?j??\?????邽?߂̃A???J?[???e???ڂɕt???Ă??܂??B
?@?i5?j?ł́AHttpResponse?̃C???X?^???X?????Ė߂?l?Ƃ??Ă??܂??BOk???\?b?h?ŃX?e?[?^?XOK?Ƃ??Acontent_type???\?b?h?Ń??X?|???X?w?b?_?i?R???e???c??HTML?AUTF-8?G???R?[?f?B???O?j???w?肵?Abody???\?b?h?Ń??X?|???X?{?f?B?[??Ԃ??Ă??܂??B???̂悤?ɁA?{?f?B?[??HTML?ł???ꍇ?ɂ̓??X?|???X?w?b?_???K?ɐݒ肷??K?v??????܂??̂Œ??ӂ??܂??傤?i????ł͎w??Ȃ??ƂȂ?܂??j?B
?@?????ŃA?v???P?[?V???????r???h?A???s???AWeb?u???E?U?Łuhttps://localhost:8000/posts?v???J???Ă݂܂??B?`???̐}1?̂悤?ɕ\???????ΑS???e?̈ꗗ?\???y?[?W?̍쐬?͐????ł??B
?y?⑫?z?e???v???[?g?̗??p
?@???̂悤??Actix Web?ł́ACGI??Java?ɂ?????T?[?u???b?g?̂悤??HTML???S???S???????ăR???e???c?Ƃ???̂???{?ł????A?{???̓e???v???[?g?Ȃǂ?p????HTML?̒??ڐ????͂ł??邾????????ׂ??ł??B???̂悤?ȗ?́A?㑱?̉?Ŏ??グ??\??ł??B
?y?⑫?zstatic???C?t?^?C???w??q
?@include_str!?́A?u&'static str?v?Ƃ??Ă??̏?ɓW?J????܂??B&str?ł͂Ȃ??u'static?v???t?^????Ă??܂????A?????static???C?t?^?C???w??q?ł??B???C?t?^?C???Ƃ͐??????Ԃł???A???̏ꍇ??static?ƕt???Ă???悤?ɁA?v???O?????̎??s???????Ƒ??݂??Ă??邱?Ƃ??Ӗ????܂??B?????ł͂??܂?l?????Ă??܂??A???̐?????include_str!?̎g???߂??A?傫?ȃt?@?C???ւ̓K?p?ɂ͋C??t?????????悢?ł??傤?B
?܂Ƃ?
?@????́AActix Web?œ??e?A?v???̍??g?݂??쐬???A???e?̈ꗗ?\???@?\??????????܂ł̎菇???Љ?܂????B
?@????́A????̑????Ƃ??č쐬?y?[?W??ڍ׃y?[?W?Ȃǂ??쐬???Ȃ???A???N?G?X?g?p?????[?^?[?̎????₻?̏??????@?Ȃǂ??Љ?܂??B
?M?ҏЉ?
WINGS?v???W?F?N?g
?L????? WINGS?v???W?F?N?g???^?c????A?e?N?j?J?????M?R?~???j?e?B?[?i??\?R?c?ˊ??j?B???Web?J??????̏??Ё^?L?????M?A?|??A?u?????L????|????B2021?N10?????_?ł̓o?^?????o?[??55?l?ŁA???݂????M?????o?[???W???B?????̂?????́A?ǂ??ǂ????咸???????B?????A?L???????B
?E?T?[?o?[?T?C?h?Z?p?̊w?ю? - WINGS?ihttps://wings.msn.to/?j
?ERSS?ihttps://wings.msn.to/contents/rss.php?j
?EX: @WingsPro_info?ihttps://x.com/WingsPro_info?j
?EFacebook?ihttps://www.facebook.com/WINGSProject?j
Copyright © ITmedia, Inc. All Rights Reserved.
?A?C?e?B???f?B?A????̂??m?点
??IT eBook
?ҏW??????̂??m?点
RSS?ɂ???
?A?C?e?B???f?B?AID?ɂ???
???[???}?K?W???o?^
??IT?̃??[???}?K?W???́A ???????A???ׂĖ????ł??B???Ѓ??[???}?K?W???????w?ǂ????????B
ITmedia?̓A?C?e?B???f?B?A??????Ђ̓o?^???W?ł??B
???f?B?A?ꗗ | ????SNS | ?L???ē? | ???₢???킹 | ?v???C?o?V?[?|???V?[ | RSS | ?^?c??? | ?̗p??? | ??????










