Dart HTTP server framework for building REST APIs. Includes PostgreSQL ORM and OAuth2 provider.

Overview

Aqueduct

OSX/Linux Build Status Windows Build status codecov

Slack

Aqueduct is a modern Dart HTTP server framework. The framework is composed of libraries for handling and routing HTTP requests, object-relational mapping (ORM), authentication and authorization (OAuth 2.0 provider) and documentation (OpenAPI). These libraries are used to build scalable REST APIs that run on the Dart VM.

If this is your first time viewing Aqueduct, check out the tour.

Getting Started

  1. Install Dart.

  2. Activate Aqueduct

     pub global activate aqueduct
    
  3. Create a new project.

     aqueduct create my_project
    

Open the project directory in IntelliJ IDE, Atom or Visual Studio Code. All three IDEs have a Dart plugin. For IntelliJ IDEA users, there are file and code templates for Aqueduct.

Tutorials, Documentation and Examples

Step-by-step tutorials for beginners are available here.

You can find the API reference here or you can install it in Dash.

You can find in-depth and conceptual guides here.

An ever-expanding repository of Aqueduct examples is here.

Comments
  • Using Aqueduct in China

    Using Aqueduct in China

    I want to create a new project use "aqueduct create app" command What should I do?Thank!!

    RhymedeMacBook-Pro:shelf_app rhyme$ aqueduct create app -- Aqueduct CLI Version: 3.0.0 *** Uncaught error NoSuchMethodError: The getter 'location' was called on null. Receiver: null Tried calling: location **** Stacktrace

    • #0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:46:5)
    • #1 _CLITemplateCreator&CLICommand&CLIAqueductGlobal.templateDirectory (package:aqueduct/src/cli/commands/create.dart:347:41)
    • #2 _CLITemplateCreator&CLICommand&CLIAqueductGlobal.getTemplateLocation (package:aqueduct/src/cli/commands/create.dart:351:12)
    • #3 CLITemplateCreator.handle (package:aqueduct/src/cli/commands/create.dart:51:27)
    • #4 CLICommand.process (package:aqueduct/src/cli/command.dart:158:20)
    • #5 CLICommand.process (package:aqueduct/src/cli/command.dart:134:12)
    • #6 main (file:///Users/rhyme/.pub-cache/hosted/pub.flutter-io.cn/aqueduct-3.0.0/bin/aqueduct.dart:9:27)
    • #7 _startIsolate. (dart:isolate/runtime/libisolate_patch.dart:277:32)
    • #8 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:165:12)

    opened by rhymelph 19
  • Problem when migrating an empty database

    Problem when migrating an empty database

    Hi, I've got all the code for my database sorted. flutter analyze --watch continues to give me no errors (with the latest analysis file from https://raw.githubusercontent.com/flutter/flutter/master/analysis_options.yaml), but I am getting the following error when running aqueduct db upgrade.

    I've successfully ran aqueduct db generate, and one file has been generated.

    I've created by app user with the createdb permission, as directed by the manual.

    Any help would be greatly appreciated.

    -- Aqueduct CLI Version: 3.3.0+1 -- Aqueduct project version: 3.3.0-b1 *** Uncaught error RangeError: Invalid value: Not in range 0..1114111, inclusive: -1 **** Stacktrace

    • #0 StringBuffer.writeCharCode (dart:core-patch/string_buffer_patch.dart:76:9)
    • #1 PostgreSQLFormat.substitute (package:postgres/src/substituter.dart:83:29)
    • #2 Query.sendExtended (package:postgres/src/query.dart:61:38)
    • #3 _PostgreSQLConnectionStateIdle.processQuery (package:postgres/src/connection_fsm.dart:182:9)
    • #4 _PostgreSQLConnectionStateIdle.awake (package:postgres/src/connection_fsm.dart:168:14)
    • #5 _PostgreSQLExecutionContextMixin._enqueue (package:postgres/src/connection.dart:399:67)
    • #6 _PostgreSQLExecutionContextMixin.query (package:postgres/src/connection.dart:318:12)
    • #7 PostgreSQLPersistentStore.execute (package:aqueduct/src/db/postgresql/postgresql_persistent_store.dart:153:37)
    • #8 PostgreSQLPersistentStore.schemaVersion (package:aqueduct/src/db/postgresql/postgresql_persistent_store.dart:216:26)
    • #9 CLIDatabaseUpgrade.handle (package:aqueduct/src/cli/commands/db_upgrade.dart:28:52)
    • #10 CLICommand.process (package:aqueduct/src/cli/command.dart:159:20)
    • #11 CLICommand.process (package:aqueduct/src/cli/command.dart:135:12)
    • #12 CLICommand.process (package:aqueduct/src/cli/command.dart:135:12)
    • #13 main (file:///home/chris/.pub-cache/hosted/pub.dartlang.org/aqueduct-3.3.0+1/bin/aqueduct.dart:9:27)
    • #14 _startIsolate. (dart:isolate-patch/isolate_patch.dart:299:32)
    • #15 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

    opened by chrisnorman7 15
  • Is there a way to define that a few properties together must be unique?

    Is there a way to define that a few properties together must be unique?

    I have a table

    [id, parentTableName, parentId, childTableName, childId]

    and I need a unique index over parentTableName, parentId, childTableName, childId

    opened by zoechi 15
  • How to serve

    How to serve "static" files?

    Hi,

    I'm trying to write a full stack Dart app, using Aqueduct on the back-end side and Angular Dart on the front-end.

    Problem is, how do I serve the files intended for the client using Aqueduct? I.e. everything that's typically in the build/web dir (and indirectly build/lib) when running pub build.

    Thanks,

    Clément

    opened by woopla 12
  • using db_and_auth template, can not register user - 401 connection refused

    using db_and_auth template, can not register user - 401 connection refused

    steps:

    1. aqueduct create -t db_and_auth db_and_auth
    2. create db 'dart_test' with 'dart':'dart' userid:password
    3. aqueduct db generate
    4. aqueduct db upgrade --connect postgres://dart:dart@localhost:5432/dart_test
    5. aqueduct auth add-client --id com.local.test --secret mysecret --connect postgres://dart:dart@localhost:5432/dart_test
    6. curl -X POST -v http://localhost:8888/register -H 'Content-Type: application/json' -d '{"username":"bob", "password":"password"}'

    curl log

    curl -X POST -v http://localhost:8888/register -H 'Content-Type: application/json' -d '{"username":"bob", "password":"password"}'
    Note: Unnecessary use of -X or --request, POST is already inferred.
    *   Trying ::1...
    * TCP_NODELAY set
    * Connection failed
    * connect to ::1 port 8888 failed: Connection refused
    *   Trying 127.0.0.1...
    * TCP_NODELAY set
    * Connected to localhost (127.0.0.1) port 8888 (#0)
    > POST /register HTTP/1.1
    > Host: localhost:8888
    > User-Agent: curl/7.54.0
    > Accept: */*
    > Content-Type: application/json
    > Content-Length: 41
    > 
    * upload completely sent off: 41 out of 41 bytes
    < HTTP/1.1 401 Unauthorized
    < x-frame-options: SAMEORIGIN
    < x-xss-protection: 1; mode=block
    < x-content-type-options: nosniff
    < content-length: 0
    < server: aqueduct/1
    < 
    * Connection #0 to host localhost left intact
    

    Result:

    • user is not created
    • _authclient is created

    Log:

    [INFO] aqueduct: Server aqueduct/1 started.  
    [INFO] aqueduct: Server aqueduct/2 started.  
    [INFO] aqueduct: Server aqueduct/3 started.  
    [INFO] aqueduct: Server aqueduct/4 started.  
    Application started on port: 8888.
    Use Ctrl-C (SIGINT) to stop running the application.
    [INFO] aqueduct: POST /register 7ms 401  
    

    Attempt to fix change channel.dart:

        /* Create an account */
        router
            .route("/register")
            //    .link(() => Authorizer.basic(authServer))   ////////////comment out this line
            .link(() => RegisterController(context, authServer));
    

    Result User gets created

    Then tried curl -v POST http://localhost:8888/auth/token -H 'Authorization: Basic Y29tLmhlcm9lcy50dXRvcmlhbDo=' -H 'Content-Type: application/x-www-formbob&password=password&grant_type=password'

    Result

    curl -v POST http://localhost:8888/auth/token -H 'Authorization: Basic Y29tLmhlcm9lcy50dXRvcmlhbDo=' -H 'Content-Type: application/x-www-form-urlencoded' -d 'username=bob&password=password&grant_type=password'
    * Rebuilt URL to: POST/
    * Could not resolve host: POST
    * Closing connection 0
    curl: (6) Could not resolve host: POST
    *   Trying ::1...
    * TCP_NODELAY set
    * Connection failed
    * connect to ::1 port 8888 failed: Connection refused
    *   Trying 127.0.0.1...
    * TCP_NODELAY set
    * Connected to localhost (127.0.0.1) port 8888 (#1)
    > POST /auth/token HTTP/1.1
    > Host: localhost:8888
    > User-Agent: curl/7.54.0
    > Accept: */*
    > Authorization: Basic Y29tLmhlcm9lcy50dXRvcmlhbDo=
    > Content-Type: application/x-www-form-urlencoded
    > Content-Length: 50
    > 
    * upload completely sent off: 50 out of 50 bytes
    < HTTP/1.1 400 Bad Request
    < content-type: application/json; charset=utf-8
    < x-frame-options: SAMEORIGIN
    < x-xss-protection: 1; mode=block
    < x-content-type-options: nosniff
    < content-length: 26
    < server: aqueduct/1
    < 
    * Connection #1 to host localhost left intact
    
    opened by bartonhammond 10
  • Error when creating a new project from command line on Windows 7

    Error when creating a new project from command line on Windows 7

    When I'm trying to create a new project from command line with the "aqueduct create" command, I'm getting an error on Windows 7.

    Here is the output :

    C:\Users\Aelayeb>aqueduct create -n web_dart
    Fetching Aqueduct as:
      aqueduct: "any"
    Determining Aqueduct template source...
    ProcessException: Le fichier sp├®cifi├® est introuvable.
    
      Command: pub get --no-packages-dir
    

    Tested on Windows 7 64bits.

    opened by aelayeb 10
  • Add more documentation on CORS

    Add more documentation on CORS

    Hello Joe @joeconwaystk :)

    Here's Benjamin, we met at DartDev Summit, if you remember ;)

    Now, after the summit, I'm trying to implement a little server with aqueduct. But I'm not able to figure out how to do that CORS support.

    There is some documentation here: http://stablekernel.github.io/aqueduct/http/request_controller.html

    I managed to come up with that:

    EmailController() {
        if (policy.allowedOrigins == null) policy.allowedOrigins = [];
    
        policy.allowedOrigins
          ..add("http://fewo-birkennest.de/*");
    }
    

    And that:

    @httpPost
    Future<Response> sendEmail(@HTTPHeader("Origin") String origin) async {
    }
    

    If I try to make a post request with Postman to that url and debug the EmailController, the defined origin variable is not shown in intelli j watcher window.

    Also, the request is allowed instead of blocked. Normally it should be blocked in this config, because localhost is not allowed.

    But even if I fake the origin to something different with Postman , e.g. "http://chip.de", the request arrives at the sendEmail method.

    Can you help me with this? :)

    opened by bjesuiter 10
  • API reference documentation and some name changes

    API reference documentation and some name changes

    Sorry for the size. Changed a lot of names to make the API more discoverable. Adding documentation for aqueduct classes and methods. This branch needs to be rebased after #91 is merged.

    opened by joeconwaystk 10
  • Authentication not working : dataModel was called on null

    Authentication not working : dataModel was called on null

    Hi, I am trying to follow this tutorial:

    https://aqueduct.io/docs/tut/oauth2/#setting-up-oauth-20-registering-users

    I have added client and trying to authenticate the user by this piece of code: `

    import 'dart:convert';
    import 'package:http/http.dart' as http;
    
    void main(List<String> arguments) async {
      const clientID = 'com.myapp';
      const body = 'username=bob&password=bobby&grant_type=password';
    
    // Note the trailing colon (:) after the clientID.
    // A client identifier secret would follow this, but there is no secret, so it is the empty string.
      final clientCredentials =
          const Base64Encoder().convert('$clientID:'.codeUnits);
    
      final response = await http.post('http://localhost:8888/auth/token',
          headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Authorization': 'Basic $clientCredentials'
          },
          body: body);
      print(response.body);
    }
    

    `

    On the server side I get this error

    [SEVERE] aqueduct: POST /auth/token 43ms 500 {user-agent : Dart/2.7 (dart:io)\ncontent-type : application/x-www-form-urlencoded; charset=utf-8\naccept-encoding : gzip\ncontent-length : 47\nhost : localhost:8888\nauthorization : Basic Y29tLm5pZGhpOg==\n}  NoSuchMethodError: The getter 'dataModel' was called on null.
    Receiver: null
    Tried calling: dataModel #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
    #1      new Query (package:aqueduct/src/db/query/query.dart:30:28)      
    #2      ManagedAuthDelegate.getClient (package:aqueduct/managed_auth.dart:426:19)
    #3      AuthServer.getClient (package:aqueduct/src/auth/authorization_server.dart:127:21)
    #4      AuthServer.authenticate (package:aqueduct/src/auth/authorization_server.dart:168:26)
    #5      AuthController.grant (package:aqueduct/src/auth/auth_controller.dart:79:40)
    #6      _InstanceMirror._invoke (dart:mirrors-patch/mirrors_impl.dart:327:37)
    #7      _InstanceMirror.invoke (dart:mirrors-patch/mirrors_impl.dart:323:25)
    #8      BoundOperation.invoke (package:aqueduct/src/http/resource_controller_internal/controller.dart:24:10)
    #9      ResourceController._process (package:aqueduct/src/http/resource_controller.dart:371:36)
    <asynchronous suspension>
    #10     ResourceController.handle (package:aqueduct/src/http/resource_controller.dart:138:14)
    <asynchronous suspension>
    #11     Controller.receive (package:aqueduct/src/http/controller.dart:174:30)
    #12     _ControllerRecycler.receive (package:aqueduct/src/http/controller.dart:402:17)
    #13     Controller.receive (package:aqueduct/src/http/controller.dart:206:28)
    <asynchronous suspension>
    #14     Router.receive (package:aqueduct/src/http/router.dart:139:18)   
    #15     _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)        
    #16     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
    #17     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
    #18     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:134:11)
    #19     _MapStream._handleData (dart:async/stream_pipe.dart:234:10)     
    #20     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:166:13)
    #21     _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)        
    #22     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
    #23     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
    #24     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
    #25     _StreamController._add (dart:async/stream_controller.dart:642:7)#26     _StreamController.add (dart:async/stream_controller.dart:588:5) 
    #27     _HttpServer._handleRequest (dart:_http/http_impl.dart:2828:19)  
    #28     new _HttpConnection.<anonymous closure> (dart:_http/http_impl.dart:2586:19)
    #29     _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)        
    #30     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
    #31     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
    #32     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
    #33     _StreamController._add (dart:async/stream_controller.dart:642:7)#34     _StreamController.add (dart:async/stream_controller.dart:588:5) 
    #35     _HttpParser._headersEnd (dart:_http/http_parser.dart:388:17)    
    #36     _HttpParser._doParse (dart:_http/http_parser.dart:703:15)       
    #37     _HttpParser._parse (dart:_http/http_parser.dart:320:7)
    #38     _HttpParser._onData (dart:_http/http_parser.dart:812:5)
    #39     _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)        
    #40     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
    #41     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
    #42     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
    #43     _StreamController._add (dart:async/stream_controller.dart:642:7)#44     _StreamController.add (dart:async/stream_controller.dart:588:5) 
    #45     _Socket._onData (dart:io-patch/socket_patch.dart:1851:41)       
    #46     _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)        
    #47     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
    #48     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
    #49     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
    #50     _StreamController._add (dart:async/stream_controller.dart:642:7)#51     _StreamController.add (dart:async/stream_controller.dart:588:5) 
    #52     new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:1399:33)
    #53     _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:919:14)
    #54     _microtaskLoop (dart:async/schedule_microtask.dart:43:21)       
    #55     _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)   
    #56     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
    #57     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:175:5)
    
    dart --version
    Dart VM version: 2.7.2 (Mon Mar 23 22:11:27 2020 +0100) on "windows_x64"
    
    aqueduct --version
    Aqueduct CLI version: 3.3.0+1
    

    UPDATE: If I do not pass Authorization in header of request then it works fine and response is

    {
        "error": "invalid_client"
    }
    

    Thanks

    Regards, Sumit Sharma

    opened by pratibhashali 9
  • Create discussion forums for Aqueduct

    Create discussion forums for Aqueduct

    To facilitate discussion outside of Issues.

    Currently interested in http://flarum.org as an option. Google Groups is lowest barrier to entry, but UI leaves much to be desired.

    opened by joeconwaystk 9
  • Jc/newdriver

    Jc/newdriver

    Changes:

    Integrated the new Postgres driver. The pubspec currently points at the git repository for now, as I'm not ready to publish the driver yet. Implements the suggested change for decoupling QueryException from the HTTP layer. Includes code that will prevent an isolate crash if an underlying socket gets detached or a response is sent more than once. Some general cleanup & changes to documentation.

    opened by joeconwaystk 9
  • Do you consider adding such a plug-in, please see the link below!

    Do you consider adding such a plug-in, please see the link below!

    laravel-api-query-builder After adding such a plug-in, the front-end request data can be very convenient, and the back-end can also write a lot of code less!

    opened by dmlzj 0
  • Annotation @ManagedTableAttributes: Is not working.

    Annotation @ManagedTableAttributes: Is not working.

    I am trying to use the @ManagedTableAttributes annotation to define two properties of a table as unique, but Aqueduct is not recognizing this annotation.

    Error Mensagem: "Undefined name 'ManagedTableAttributes' used as an annotation.Try defining the name or importing it from another library."

    I am using Aqueduct version ^ 3.3.0 + 1 and dart sdk version 2.10.5.

    My code:

    `import 'package:agclinic/model/functionality.dart'; import 'package:agclinic/model/perfil.dart';

    import '../agclinic.dart';

    class ProfileFunctionality extends ManagedObject<_ProfileFunctionality> implements _ProfileFunctionality{

    }

    @ManagedTableAttributes(uniquePropertySet: const [#profile, #functionality]) class _ProfileFunctionalitye{

    @primaryKey int id;

    @Relate(#profileFunctionality) Profile profile;

    @Relate(#profileFunctionality) Functionality functionality;

    }`

    opened by marciotrix77 1
  • Here's how to fix your Heroku app (SSL)

    Here's how to fix your Heroku app (SSL)

    My Heroku instance suddenly stopped accepting connections to the DB without an SSL certificate, and so my application stopped working. Just in case someone else bumps into this problem, here's what I did:

    • Update your pubspec.yaml to point to this repo instead of the latest version of Aqueduct. Props to NayanJD for his pull request. Remember to add a dependency_overrides section. You might also need to set publish_to to none.
    • In the channel.dart file, the one inside of your own project, within the contextWithConnectionInfo method, set the useSSL option in the PostgreSQLPersistentStore constructor to true.
    • Add the --use-ssl option to the release command in Procfile.
    opened by Eddydpyl 2
  • Feature-Request: Replace mirrors with reflectable

    Feature-Request: Replace mirrors with reflectable

    Mirrors-Library state unclear, see: https://github.com/dart-lang/sdk/issues/44489

    Seee thiis README for more details on reflectable: https://github.com/google/reflectable.dart/blob/master/reflectable/README.md

    opened by jayjah 0
  • null-safety error on commands

    null-safety error on commands

    I have dart 2.12.0 which is stable and support sound and unsound null safety. When I run aqueduct serve I get an error which it says the script don't use null-safety because of this I get error and I can't do anything like migration and other commands did team have any solution for this kind of errors?

    opened by EhsanAramide 3
  • Dependency issues, new versions of googleapis are no longer compatible

    Dependency issues, new versions of googleapis are no longer compatible

    Hope everything is going okay over there. I have started getting dependency issues with aqueduct:

    Because googleapis_auth >=1.0.0 depends on crypto ^3.0.0 and aqueduct 4.0.0-b1 depends on crypto ^2.0.6, googleapis_auth >=1.0.0 is incompatible with aqueduct 4.0.0-b1

    I guess this comes under the same ticket as https://github.com/stablekernel/aqueduct/issues/919 but I opened a new one as this is more specific.

    opened by jimmyff 0
Releases(3.2.0)
  • 3.2.0(Mar 7, 2019)

    Adds read method to Serializable for filtering, ignoring or rejecting keys. Fixes issues with Dart 2.1.1 mirror type checking changes Adds like matcher expression Escapes postgres special characters in LIKE expressions for all other string matcher expressions Fixes security vulnerability where a specific authorization header value would be associated with the wrong token in rare cases (credit to Philipp Schiffmann) Adds Validate.constant to properties that use the @primaryKey annotation. Allows Validate annotations to be added to belongs-to relationship properties; the validation is run on the foreign key. Allows any type - e.g. Map<String, dynamic> - to be bound with Bind.body.

    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(Dec 17, 2018)

    • Adds the implicit authorization grant flow via the AuthRedirectController type.
    • Deprecates AuthCodeController in favor of AuthRedirectController.
    • Improves speed of many database CLI commands
    • Improves error messaging of the CLI; no longer includes stack trace for expected errors.
    • Allows self-referencing and cyclical relationships between managed objects
    • Autoincrementing managed object properties are no longer consumed in ManagedObject.readFromMap.
    • Fixes bug where ManagedObjects cannot have mixins
    • Adds ManagedContext.insertObject, ManagedContext.insertObjects and ManagedContext.fetchObjectWithID.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.2(Dec 13, 2018)

  • v3.0.1(Dec 13, 2018)

  • v3.0.0(Dec 13, 2018)

  • v2.5.0(Oct 12, 2017)

    • Adds aqueduct db schema to print an application's data model.
    • Adds aqueduct document serve that serves the API documentation for an application.
    • Adds --machine flag to aqueduct tool to only emit machine-readable output.
    • Adds defaultDelay to MockHTTPServer. Defaults to null for no delay.
    • Adds defaultResponse to MockHTTPServer. Defaults to a 503 response instead of a 200.
    • Adds option to set a custom delay for a specific response in MockHTTPServer's queueResponse function.
    • Performance improvements
    Source code(tar.gz)
    Source code(zip)
  • v2.4.0(Aug 30, 2017)

    • Adds HTTPRequestBody.maxSize to limit HTTP request body sizes. Defaults to 10MB.
    • Adds ManagedTableAttributes to configure underlying database table to use multiple columns to test for uniqueness.
    Source code(tar.gz)
    Source code(zip)
  • v2.3.2(Jul 22, 2017)

  • v2.3.1(Jul 20, 2017)

    • Adds Response.bufferOutput to control whether the HTTP response bytes are buffered.
    • Adds whereNot to apply an inverse to other Query.where expression, e.g. whereNot(whereIn(["a", "b"])).
    • Fixes bug where subclassing ManagedObjectController didn't work.
    • Renames ResourceRegistry to ServiceRegistry.
    • Improves feedback and interface for package:aqueduct/test.dart.
    Source code(tar.gz)
    Source code(zip)
  • v2.3.0(Jun 29, 2017)

    • Adds Request.acceptableContentTypes and Request.acceptsContentType for convenient usage of Accept header.
    • Adds AuthStorage.allowedScopesForAuthenticatable to provide user attribute-based scoping, e.g. roles.
    • Adds Query.forEntity and ManagedObjectController.forEntity to dynamically instantiate these types, i.e. use runtime values to build the query.
    • Adds PersistentStore.newQuery - allows a PersistentStore implementation to provide its own implementation of Query specific to its underlying database.
    • Adds Query.reduce to perform aggregate functions on database tables, e.g. sum, average, maximum, etc.
    • enums may be used as persistent properties in ManagedObject<T>. The underlying database will store them a strings.
    • Speed of generating a template project has been greatly improved.
    Source code(tar.gz)
    Source code(zip)
  • v2.2.2(Jun 10, 2017)

  • v2.2.1(Jun 9, 2017)

  • v2.2.0(Jun 9, 2017)

    • The default template created by aqueduct create is now mostly empty. Available templates can be listed with aqueduct create list-templates and selected with the command-line option --template.
    • Bug fixes where aqueduct auth would fail to insert new Client IDs.
    • joinMany and joinOne are deprecated, use join(set:) and join(object:) instead.
    • HTTPCodecRepository replaces Response.addEncoder and HTTPBody.addDecoder.
    • Streams may now be Response bodies.
    • Request bodies may be bound in HTTPController with HTTPBody metadata.
    • Adds file serving with HTTPFileController.
    • Adds HTTPCachePolicy to control cache headers for a Response.
    • Request.body has significantly improved behavior and has been optimized.
    • Content-Length is included instead of Transfer-Encoding: chunked when the size of the response body can be determined efficiently.
    Source code(tar.gz)
    Source code(zip)
  • v2.1.1(May 8, 2017)

    • Adds ResourceRegistry: tracks port-consuming resources like database connections to ensure they are closed when an application shuts down during testing.
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Apr 27, 2017)

    • Fixes race condition when stopping an application during test execution
    • Adds validation behavior to ManagedObjects using Validate, ManagedValidator and ManagedObject.validate.
    • ManagedObjects now have callbacks willUpdate and willInsert to modify their values before updating and inserting.
    • Fixes issue with aqueduct serve on Windows.
    Source code(tar.gz)
    Source code(zip)
Owner
Stable Kernel
Stable Kernel
Postgres-conector - A library for connecting to and querying PostgreSQL databases in Dart.

TODO: Put a short description of the package here that helps potential users know whether this package might be useful for them. Features TODO: List w

null 2 Nov 14, 2021
News Headline app is build in Flutter MVVM and REST Apis for News is used in this app.

About The Project Flutter MVVM project for News Headlines. REST Api for News is used in this project. App Demo Api for News Get free api from here : h

Aizaz ahmad 3 Aug 16, 2022
Petit httpd - This is a simple HTTP file server integrated with Let's Encrypt, gzip and CORS

Petit httpd - This is a simple HTTP file server integrated with Let's Encrypt, gzip and CORS

Graciliano Monteiro Passos 4 Nov 24, 2022
DChisel is simple Dart Framework for creating REST API

DChisel Dart Framework DChisel is simple Dart Framework for creating REST API Features Custom host server and port GET, POST, PUT, DELETE, PATCH Route

M Nasrul Alawy 23 Jan 6, 2023
An expressive, functional, and full-featured server-side framework for Dart.

A framework and collection of packages for writing http servers, built on top of the shelf package. This framework is intended to reduce the technical

Marathon 45 Jun 25, 2022
Modular server framework with ConnectMe (WebSockets + PackMe) and MongoDb support.

What is ServeMe ServeMe is a simple and powerful modular server framework. It allows to easily create backend services for both mobile and web applica

Source Caster 20 Dec 3, 2022
Rokeet UI - A Server Driven UI Framework

Rokeet UI A Server-Driven UI framework. Status Lib Build Coverage Core Configure Mockoon server Install Mockoon: Mac OSX brew install --cask mockoon

osodroid 6 Apr 7, 2022
A Flutter server rendering framework

Shark Flutter ?? (Under Construction) A Flutter server rendering framework After i finish the project structure, I would draw a project diagram and de

Vau 62 Dec 29, 2022
A performant, expressjs like server framework with a few gadgets that make life even easier.

Alfred A performant, expressjs like server framework thats easy to use and has all the bits in one place. Quickstart: import 'package:alfred/alfred.da

Ryan Knell 449 Jan 2, 2023
Starter app for Flutter that includes many different production app features; some not typically included in demo apps.

first_app: Starter app for a Flutter production app Maintainer: Greger Wedel, https://github.com/gregertw Listed on: Latest build and artifacts: ** La

Greger Teigre Wedel 373 Jan 8, 2023
Fetchx - Simplified http requests in Dart

Fetchx Fetchx is a simple, fast, and secure HTTP client for Dart. It leverages extensions to allow using url-like strings to make http requests. Read

Brian Omondi 9 Nov 26, 2022
Expenses tracker built with Flutter and Dart making use of Provider, Intl, Syncfusion Flutter Datepicker and more

expense_app A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if t

Atuoha Anthony 2 Dec 10, 2022
Flutter e-Commerce application using APIs, Bloc, Dio, and Shared Preferences.

shop_in Flutter e-Commerce application using APIs, Bloc, Dio, and Shared Preferences. Onboarding screens with skip button. Login and register screens

Eslam Esmail 13 Oct 21, 2022
Chopper is an http client generator using source_gen and inspired from Retrofit.

Chopper Chopper is an http client generator for Dart and Flutter using source_gen and inspired by Retrofit. Documentation Installation Please refer to

Hadrien Lejard 632 Dec 31, 2022
A simple app to demonstrate a testable, maintainable, and scalable architecture for flutter. flutter_bloc, hive, and REST API are some of the tech stacks used in this project.

last_fm A simple app to demonstrate a testable, maintainable, and scalable architecture for flutter. flutter_bloc, hive, and REST API are some of the

Elias Andualem 140 Dec 31, 2022
App de estudo para treino de layout e requisição de APIs. Faz conversão de real para 5 tipos de criptomoedas, exibe gráfico de evolução e as últimas notícias do mercado. Em construção.

cryptonight A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if t

Ana Carol Cortez 1 Sep 25, 2022
Flutter plugin to use ContentProvider/ContentResolver APIs on Android

android_content_provider This plugin exposes ContentProvider and related ContentResolver APIs on Android. Android 11 package visibility Android 11 int

null 9 Oct 28, 2022
used REStful APIs to fetch reports of covid-19

covid_tracker A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if

Aun Abbas Ali 2 Oct 9, 2022
Dart GraphQL server implementation. Utilities, code generator, examples and reference implementation.

Leto - GraphQL Server A complete implementation of the official GraphQL specification in the Dart programming language. Inspired by graphql-js, async-

Juan Manuel Castillo 29 Nov 27, 2022