RailPhase ist ein schlankes .NET-Web-Framework. Es stellt Funktionen bereit, um Web-Anwendungen oder eingebettete Webserver für andere Anwendungen zu entwickeln.

Development time 2015-2016
Development duration 8 Months
Technologies C#
License MIT
Team size Single developer

RailPhase lehnt seine API an bekannte Frameworks wie Ruby on Rails an, überlässt dem Benutzer aber die volle Kontrolle über den Programmfluss. Die Bibliothek ist dadurch vor allem für eingebettete Web-Bedienoberflächen nützlich, beispielsweise als Webinterface für Download-Manager.

RailPhase ist aber gleichzeitig auch zur Entwicklung von alleinstehenden Web-Anwendungen geeignet. Diese Webseite beispielsweise läuft auf RailPhase. Dank der .NET-Plattform bietet es einige wichtige Performance-Vorteile gegenüber anderen Frameworks, die auf dynamisch typisierten Sprachen aufbauen. Das Template-System von RailPhase beispielsweise nutzt JIT-kompilierte Generatoren und erzeugt Inhalte so mit etwa der zehnfachen Geschwindigkeit des Template-Systems von Django.

Beispiele

Die API von RailPhase ist minimalistisch gehalten, um dem Benutzer möglichst wenig Zeitaufwand für das Lesen der Dokumentation abzuverlangen.

Dieser C#-Code startet einen HTTP-Server auf Port 8080, der die aktuelle Uhrzeit auf /time anzeigt:

// Erzeuge eine neue Web-Anwendung
var app = new App();

// AddStringView erwartet einen regulären Ausdruck und ein Delegate, das einen String
// für HTTP-Anfragen erzeugt, die auf den regulären Ausdruck passen.
app.AddStringView("^/time$", (context) => DateTime.Now.ToString());

// Starte den Webserver auf Port 8080
app.RunHttpServer("http://localhost:8080/");

HTML-Inhalte oder andere Formate können mit dem Template-System generiert werden. Dieses HTML-Template verarbeitet ein DateTime-Objekt als Input und erzeugt daraus eine formatierte Webseite:

<h1>The Year is {{Year}}.</h1>

<p>
  {% if Year % 4 == 0 && Year % 100 != 0 || Year % 400 == 0 %}
    This year is a leap year.
  {% endif %}
  The month is {{ Data.ToString("MMMM") }}.
  It has been {{Day}} days since the beginning of the month.
  Today is a {{ Data.ToString("dddd") }}.
</p>

Diese Zeile weist RailPhase an, das Template zu verwenden, um DateTime.Now anzuzeigen:

app.AddStringView(
  "^/$", 
  context => Template.FromFile("DateTimeTemplate.html")(DateTime.Now, context)
);

Das Ergebnis:

The Year is 2016. This year is a leap year. The month is July. It has been 30 days...

Mehr Projekte