http_middleware 0.0.9

  • README.md
  • CHANGELOG.md
  • Installing
  • Versions
  • 20

http_middleware

A middleware library for Dart http library.

Getting Started

http_middleware is a module that lets you build middleware for Dart's http package.

Installing

Include this library in your package.

http_middleware: any

Importing

import 'package:http_middleware/http_middleware.dart';

Using http_middleware

Create an object of HttpWithMiddleware by using the build factory constructor.

The build constructor takes in a list of middlewares that are built for http_middleware. One very nice middleware you can use is the http_logger package. We will use that here for demonstration.

(You can also build your own middleware for http_middleware. Check out Build your own middleware)
HttpWithMiddleware http = HttpWithMiddleware.build(middlewares: [
    HttpLogger(logLevel: LogLevel.BODY),
]);

That is it! Now go ahead and use this http object as you would normally do.

//Simple POST request
var response = await http.post('https://jsonplaceholder.typicode.com/posts/',
    body: {"testing", "1234"});

//Simple GET request
var response = await http.get('https://jsonplaceholder.typicode.com/posts/');

Request Timout

With http_middleware you can also specify the timeout of requests. So if you want a request to be timeout in 30 seconds:

HttpWithMiddleware http = HttpWithMiddleware.build(
  requestTimeout: Duration(seconds: 30),
  middlewares: [
    HttpLogger(logLevel: LogLevel.BODY),
]);

You need to catch the exception thrown to know if connection timed out.

try {
  var response = await http.get('https://jsonplaceholder.typicode.com/posts/');
} catch(e) {
  if (e is TimeoutException) {
    //Timed out
  }
}

HttpWithMiddleware supports all the functions that http provides.

http.get(...);
http.post(...);
http.put(...);
http.delete(...);
http.head(...);
http.patch(...);
http.read(...);
http.readBytes(...);

Using a Client

If you want to use a http.Client in order to keep the connection alive with the server, use HttpClientWithMiddleware.

HttpClientWithMiddleware httpClient = HttpClientWithMiddleware.build(middlewares: [
    HttpLogger(logLevel: LogLevel.BODY),
]);

var response = await httpClient.post('https://jsonplaceholder.typicode.com/posts/',
    body: {"testing", "1234"});

var response = await httpClient.get('https://jsonplaceholder.typicode.com/posts/');

//Don't forget to close the client once done.
httpClient.close();

Building your own middleware

Building your own middleware with http_middleware is very easy, whether you want to create a package for http_middleware or you want to build a middleware solely for your own project.

Once you have the necessary imports, all you have to do is extend the MiddlewareContract class which will give you access to 2 functions.

interceptRequest(RequestData) is the method called before any request is made. interceptResponse(ResponseData) is the method called after the response from request is received.

You can then @override all the required functions you need to add middleware to.

Example (A simple logger that logs data in all requests):

class Logger extends MiddlewareContract {
  @override
  interceptRequest({RequestData data}) {
    print("Method: ${data.method}");
    print("Url: ${data.url}");
    print("Body: ${data.body}");
  }

  @override
  interceptResponse({ResponseData data}) {
    print("Status Code: ${data.statusCode}");
    print("Method: ${data.method}");
    print("Url: ${data.url}");
    print("Body: ${data.body}");
    print("Headers: ${data.headers}");
  }
}

You can also modify the RequestData before the request is made and every ResponseData after every response is received. For Example, if you want to wrap your data in a particular structure before sending, or you want every request header to have Content-Type set to application/json.

class Logger extends MiddlewareContract {
  @override
  interceptRequest({RequestData data}) {
    //Adding content type to every request
    data.headers["Content-Type"] = "application/json";
    
    data.body = jsonEncode({
      uniqueId: "some unique id",
      data: data.body,
    });
  }

  @override
  interceptResponse({ResponseData data}) {
    //Unwrapping response from a structure
    data.body = jsonDecode(data.body)["data"];
  }
}

Packages built on http_middleware

If your package uses http_middleware, open an issue and tell me, i will be happy to add it to the list.

[0.0.1] - TODO: Add release date.

  • TODO: Describe initial release.

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  http_middleware: ^0.0.9

2. Install it

You can install packages from the command line:

with pub:


$ pub get

Alternatively, your editor might support pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:http_middleware/http_middleware.dart';
  
Version Uploaded Documentation Archive
0.0.9 Jul 24, 2018 Go to the documentation of http_middleware 0.0.9 Download http_middleware 0.0.9 archive
0.0.8 Jul 24, 2018 Go to the documentation of http_middleware 0.0.8 Download http_middleware 0.0.8 archive
0.0.7 Jul 23, 2018 Go to the documentation of http_middleware 0.0.7 Download http_middleware 0.0.7 archive
0.0.6 Jul 23, 2018 Go to the documentation of http_middleware 0.0.6 Download http_middleware 0.0.6 archive
0.0.5 Jul 19, 2018 Go to the documentation of http_middleware 0.0.5 Download http_middleware 0.0.5 archive
0.0.4 Jul 19, 2018 Go to the documentation of http_middleware 0.0.4 Download http_middleware 0.0.4 archive
0.0.3 Jul 19, 2018 Go to the documentation of http_middleware 0.0.3 Download http_middleware 0.0.3 archive
0.0.2 Jul 19, 2018 Go to the documentation of http_middleware 0.0.2 Download http_middleware 0.0.2 archive
0.0.1 Jul 19, 2018 Go to the documentation of http_middleware 0.0.1 Download http_middleware 0.0.1 archive
Popularity:
Describes how popular the package is relative to other packages. [more]
39
Health:
Code health derived from static analysis. [more]
0
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
0
Overall:
Weighted score of the above. [more]
20
Learn more about scoring.

The package version is not analyzed, because it does not support Dart 2. Until this is resolved, the package will receive a health and maintenance score of 0.

Issues and suggestions

Support Dart 2 in pubspec.yaml.

The SDK constraint in pubspec.yaml doesn't allow the Dart 2.0.0 release. For information about upgrading it to be Dart 2 compatible, please see https://www.dartlang.org/dart-2#migration.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=1.8.0 <2.0.0