arowana
A lightweight HTTP server framework for Dart.It is based on the shelf library for handling HTTP requests and implements a high-performance routing with reference to Golang’s Gin framework.
Usage
A simple usage example:
import 'dart:isolate'; import 'package:arowana/arowana.dart'; class MyAChannel extends DefaultChannel{ @override Future prepare() { print('current isolate [${Isolate.current.debugName}]'); return super.prepare(); } @override void entryPoint() { get('/hello', (r){ return Response.ok('hello,arowana!'); }); } } void main() { var app = Application(MyAChannel()); app.start(numberOfInstances: 2,consoleLogging: true); }
Another example, containing grouped routes:
class MyAChannel extends AppChannel { Router app = Router(); Middleware verification() => (innerHandler) { return (request) async { if (request.query['name'] == 'abc' && request.query['pass'] == '123') { return await innerHandler(request); } else { return ResponseX.unauthorized('Authentication failed !!!'); } }; }; @override void entryPoint() { var r1 = app.group('/v1'); // var middleware = Pipeline().addMiddleware(verification()).middleware; r1.use(verification()); r1.get('/hello', (Request request) { return Response.ok('hello-world'); }); r1.get('/greet/:name', (Request request, String name) { return Response.ok('Hi,$name'); }); var r2 = app.group('/v2'); r2.get('/hello', (Request request) { return Response.ok('hello,arowana'); }); r2.get('/user/:name', (Request request, String user) { return Response.ok('hello, $user'); }); } @override FutureOr<Response> call(Request request) { print('current isolate [${Isolate.current.debugName}]'); return app.call(request); } } void main() { var app = Application(MyAChannel()); app.options = ApplicationOptions()..address = '127.0.0.1'; app.start(numberOfInstances: 2,consoleLogging: true); }
Features and bugs
Please file feature requests and bugs at the issue tracker.
Contribute and download source code on GitHub
Provides the list of the opensource Flutter apps collection with GitHub repository.