Chromium Code Reviews| Index: pkg/shelf/README.md |
| diff --git a/pkg/shelf/README.md b/pkg/shelf/README.md |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7a35b03bbf38bf38290ebc4cc2dc42715a8a7d1e |
| --- /dev/null |
| +++ b/pkg/shelf/README.md |
| @@ -0,0 +1,43 @@ |
| +#Shelf |
|
nweiz
2014/04/01 19:13:11
This is unnecessary.
kevmoo
2014/04/01 19:24:04
Done.
|
| +### Web Server Middleware for Dart |
| + |
| +## tl;dr |
| + |
| +**Shelf** makes it easy to create and compose **web servers** and **parts of web |
| +servers**. How? |
| + |
| +* Expose a small set of simple types. |
| +* Map server logic into a simple function: a single argument for the request, |
| +the response is the return value. |
| +* Trivially mix and match synchronous and asynchronous processing. |
| +* Flexibliity to return a simple string or a byte stream with the same model. |
| + |
| +## Example |
| + |
| +See `example/example_server.dart` |
| + |
| +```dart |
| +import 'package:shelf/shelf.dart' as shelf; |
| +import 'package:shelf/shelf_io.dart' as io; |
| + |
| +void main() { |
| + var handler = const shelf.Stack().addMiddleware(shelf.logRequests()) |
| + .addHandler(_echoRequest); |
| + |
| + io.serve(handler, 'localhost', 8080).then((server) { |
| + print('Serving at http://${server.address.host}:${server.port}'); |
| + }); |
| +} |
| + |
| +shelf.Response _echoRequest(shelf.Request request) { |
| + return new shelf.Response.ok('Request for "${request.pathInfo}"'); |
| +} |
| +``` |
| + |
| +## Inspiration |
| + |
| +* [Connect](http://www.senchalabs.org/connect/) for NodeJS. |
| + * Read [this great write-up](http://howtonode.org/connect-it) to understand |
| + the overall philosophy of all of these models. |
| +* [Rack](http://rack.github.io/) for Ruby. |
| +* [WSGI](http://legacy.python.org/dev/peps/pep-3333/) for Python. |