My favorites | Sign in
Project Home Downloads Wiki Issues Source
Project Information
Members
Featured
Downloads
Wiki pages
Links

Exyus

The goal is to create a light-weight highly-scalable HTTP server framework that is fully REST-compliant. The code will be built using C# (on Win32 to start) and have optional dependencies on SQL-based database (MS SQL to start).

Version 0.06 Posted

(2008-03-16) This version has the database support (via XmlSqlResource) built-in. Now you can use MS-SQL Server (2005+) as a data store. Check out the User Group Data Example to see it in action.

Latest News

Check out the latest demos at the live site:

Also check out the latest tutorials:

Features

The current version of Exyus has the following features:

  • Resource-oriented coding - you create inbound endpoints by creating resource classes
  • Built-in support for standard HTTP Methods (GET,HEAD,PUT,POST,DELETE,OPTION as resource methods)
  • Url-Mapping - Resource classes can support multiple Uri patterns (via regular expressions)
  • Multiple Representations - The same resource can support any number of Content Types (XML, JSON, Atom, HTML, etc.)
  • Caching Support - Mark your resource to support Validation and/or Expiration caching
  • Authentication - Supports Digest and Basic Auth
  • Authorization - Map Urls and HTTP Methods for user access
  • Compression - Automatically supports gzip/deflate per client headers.
  • Built-in HTTPClient - Perform direct HTTP requests against other HTTP servers.

Quick Example

Using the Exyus engine means you can define a read/write resource that allows live editing (tested w/ Amaya browser) with just the following C# code:

using System;
using Exyus.Web;

namespace Exyus.Editable
{
    // full read/write via PUT w/ ETags
    [UriPattern(@"/editable/(?<docid>[^/?]*)?(?:\.xcs)(?:[?])?(?:.*)?")]
    [MediaTypes("text/html","application/json","application/atom+xml")]
    public class editPages : XmlFileResource
    {
        public editPages()
        {
            this.ContentType = "text/html";
            this.UpdateMediaTypes = new string[] { "text/html" };
            this.AllowPost = false;
            this.AllowCreateOnPut = true;
            this.DocumentsFolder = "~/documents/editable/";
            this.StorageFolder = "~/storage/editable/";
            this.XHtmlNodes = new string[] { "//body" };
            this.LocalMaxAge = 600;
            this.ImmediateCacheUriTemplates = new string[]
                {
                    "/editable/.xcs",
                    "/editable/{docid}.xcs"
                };
        }
    }

}
Powered by Google Project Hosting