api_response_timer 0.1.1 copy "api_response_timer: ^0.1.1" to clipboard
api_response_timer: ^0.1.1 copied to clipboard

A lightweight HTTP client wrapper that measures API response times with detailed timing metrics.

api_response_timer #

A lightweight HTTP client wrapper that measures API response times with detailed timing metrics.

Features #

  • Wraps any http.Client using the standard BaseClient interface
  • Measures elapsed time from request send to full response body received
  • Captures URL, HTTP method, status code, response time, and response size
  • Preserves original response behavior (response body remains fully readable)
  • Uses deterministic timing with Stopwatch

Installation #

Add to your pubspec.yaml:

dependencies:
  api_response_timer: ^0.1.0

Usage #

import 'package:api_response_timer/api_response_timer.dart';

void main() async {
  final client = TimedClient(
    onComplete: (timing) {
      print('Request: ${timing.method} ${timing.url}');
      print('Status: ${timing.statusCode}');
      print('Response time: ${timing.responseTime.inMilliseconds}ms');
      print('Response size: ${timing.responseSize} bytes');
    },
  );

  final response = await client.get(Uri.parse('https://api.example.com/data'));
  print('Body: ${response.body}');

  client.close();
}

Using with an existing client #

import 'package:http/http.dart' as http;
import 'package:api_response_timer/api_response_timer.dart';

void main() async {
  final innerClient = http.Client();

  final timedClient = TimedClient(
    inner: innerClient,
    onComplete: (timing) {
      print('${timing.method} ${timing.url} - ${timing.responseTime.inMilliseconds}ms');
    },
  );

  final response = await timedClient.post(
    Uri.parse('https://api.example.com/items'),
    body: '{"name": "test"}',
    headers: {'Content-Type': 'application/json'},
  );

  print('Created: ${response.body}');
  timedClient.close();
}

Collecting metrics #

import 'package:api_response_timer/api_response_timer.dart';

class MetricsCollector {
  final List<ApiTiming> _timings = [];

  void record(ApiTiming timing) {
    _timings.add(timing);
  }

  double get averageResponseTimeMs {
    if (_timings.isEmpty) return 0;
    final total = _timings.fold<int>(
      0,
      (sum, t) => sum + t.responseTime.inMilliseconds,
    );
    return total / _timings.length;
  }
}

void main() async {
  final collector = MetricsCollector();

  final client = TimedClient(
    onComplete: collector.record,
  );

  await client.get(Uri.parse('https://api.example.com/users'));
  await client.get(Uri.parse('https://api.example.com/posts'));

  print('Average response time: ${collector.averageResponseTimeMs}ms');

  client.close();
}

API Reference #

TimedClient #

TimedClient({
  http.Client? inner,
  required OnTimingComplete onComplete,
})
  • inner: Optional existing http.Client to wrap. If not provided, creates a new client.
  • onComplete: Callback invoked after each request with timing metrics.

ApiTiming #

Immutable data model containing:

Property Type Description
url Uri The request URL
method String HTTP method (GET, POST, etc.)
statusCode int HTTP status code
responseTime Duration Time from request to response received
responseSize int Response body size in bytes

License #

MIT License

1
likes
160
points
172
downloads

Publisher

verified publishernilenpatelinc.com

Weekly Downloads

A lightweight HTTP client wrapper that measures API response times with detailed timing metrics.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

http

More

Packages that depend on api_response_timer