rust canteen
1.0.0
캔틴은 내가 Rust에서 구현 한 첫 번째 프로젝트입니다. 내가 가장 좋아하는 Python 웹 프레임 워크 인 Flask의 클론입니다. 캔틴 -IMPL 저장소에는 예제 구현에 대한 코드가 있습니다.
결코 완전하지는 않지만 작업 중이며 이제 Crates.io에서 사용할 수 있습니다! 설치하고 확인하려면 다음을화물에 추가하십시오.
[ dependencies ]
canteen = " 0.5 " 매점의 원칙은 간단합니다. 핸들러 기능은 Request 받고 Response 반환하는 간단한 녹 기능으로 정의됩니다. 그런 다음 핸들러는 하나 이상의 경로 및 HTTP 방법/동사에 연결됩니다. 경로는 간단한 구문을 사용하여 지정되어 그 안에 변수를 정의 할 수 있습니다. 그런 다음 다양한 작업을 수행하기 위해 추출 할 수있는 변수입니다. 현재 다음 변수 유형을 사용할 수 있습니다.
<str:name> 경로 세그먼트 내부의 모든 것을 일치시키고 String 반환합니다.<int:name> 경로 세그먼트에서 서명 된 정수 ( i32 )를 반환합니다.cnt.add_route("/api/foo/<int:foo_id>", &[Method::Get], my_handler) 는 "/api/foo/123" , "/api/foo/123.34" 또는 "/api/foo/bar" 와 일치합니다.<uint:name> 부호없는 정수를 반환합니다 ( u32 )<float:name> int 매개 변수 정의와 동일한 작업을 수행하지만 숫자는 소수점과 일치하고 f32 반환합니다.<path:name> 이 욕심이 포함 된 모든 경로 데이터를 가져 와서 String 반환합니다.cnt.add_route("/static/<path:name>", &[Method::Get], utils::static_file) /static/ directory의 모든 것을 파일로 제공합니다.핸들러가 경로에 연결된 후 다음 단계는 서버를 간단히 시작하는 것입니다. 요청이 접수 될 때마다 관련 핸들러와 함께 ThreadPool 작업자에게 발송됩니다. 작업자는 부모가 완료되면 상위 프로세스에 알리고 응답이 클라이언트에게 다시 전송됩니다. 아주 간단한 것들!
extern crate canteen ;
use canteen :: * ;
use canteen :: utils ;
fn hello_handler ( req : & Request ) -> Response {
let mut res = Response :: new ( ) ;
res . set_status ( 200 ) ;
res . set_content_type ( "text/plain" ) ;
res . append ( "Hello, world!" ) ;
res
}
fn double_handler ( req : & Request ) -> Response {
let to_dbl : i32 = req . get ( "to_dbl" ) ;
/* simpler response generation syntax */
utils :: make_response ( format ! ( "{}" , to_dbl * 2 ) , "text/plain" , 200 )
}
fn main ( ) {
let cnt = Canteen :: new ( ) ;
// bind to the listening address
cnt . bind ( ( "127.0.0.1" , 8080 ) ) ;
// set the default route handler to show a 404 message
cnt . set_default ( utils :: err_404 ) ;
// respond to requests to / with "Hello, world!"
cnt . add_route ( "/" , & [ Method :: Get ] , hello_handler ) ;
// pull a variable from the path and do something with it
cnt . add_route ( "/double/<int:to_dbl>" , & [ Method :: Get ] , double_handler ) ;
// serve raw files from the /static/ directory
cnt . add_route ( "/static/<path:path>" , & [ Method :: Get ] , utils :: static_file ) ;
cnt . run ( ) ;
}