Skip to content

wasi/rustful

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rustful

Build Status

A RESTful web framework for Rust. The main purpose of rustful is to create a simple, light and non-intrusive foundation for HTTP based applications. It is based on a stateless structure, where response handlers are assigned to paths and HTTP methods, which naturally allows it to run both as a single server or as multiple instances in a computer cluster.

Some of the features are:

  • Generic response handlers. Just implement the Handler trait and you are done.
  • Optional resource cache with lazy loading and simple cleaning of unused data.
  • Some handy macros reduces risk for typos and makes life easier.
  • Variables and recursive wildcards in routes.
  • Minimal routing overhead.

Online documentation can be found here.

#Getting started

##Cargo.toml Entries

Add the following lines to your Cargo.toml file to get the main library:

[dependencies.rustful]
git = "https://github.com/Ogeon/rustful"

and the following lines to get all the helpful macros:

[dependencies.rustful_macros]
git = "https://github.com/Ogeon/rustful"

###Default Features

  • macros - A collection of helpful macros.

##Write your server Here is a simple example of what a simple project could look like. Visit http://localhost:8080 or http://localhost:8080/Olivia (if your name is Olivia) to try it.

//Include `rustful_macros` during the plugin phase
//to be able to use `router!` and `try_send!`.
#![feature(phase)]
#[phase(plugin)]
extern crate rustful_macros;

extern crate rustful;
use rustful::{Server, Request, Response};
use rustful::Method::Get;

fn say_hello(request: Request, response: Response) {
    //Get the value of the path variable `:person`, from below.
    let person = match request.variables.get(&"person".into_string()) {
        Some(name) => name.as_slice(),
        None => "stranger"
    };

    //Use the value of the path variable to say hello.
    try_send!(response.into_writer(), format!("Hello, {}!", person) while "saying hello");
}

fn main() {
    let router = router!{
        //Handle requests for root...
        "/" => Get: say_hello,

        //...and one level below.
        //`:person` is a path variable and it will be accessible in the handler.
        "/:person" => Get: say_hello
    };

    //Build and run the server.
    let server_result = Server::new().port(8080).handlers(router).run();

    match server_result {
        Ok(_server) => {},
        Err(e) => println!("could not start server: {}", e)
    }
}

##Contributing Yes, please! This is currently a one man show, so any help is welcome. Just fork it, implement your idea or fix the bug you have found and send a pull request.

About

A RESTful web framework for Rust

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 99.0%
  • Shell 1.0%