CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

24 April, 2021

Guzzle Advanced Throttling Middleware and Laravel Package

 Programing Coderfunda     April 24, 2021     Packages, php     No comments   

Guzzle Advanced Throttling Middleware and Laravel Package


Full stack developer Timo Prüße has created a Guzzle middleware that helps you set up advanced API request throttling within your Guzzle handler stack.

Here’s the description from the GitHub repository about what guzzle-advanced-throttle can do for external APIs that you are using that might have rate limits:

A Guzzle middleware that can throttle requests according to (multiple) defined rules. It is also possible to define a caching strategy, e.g. get the response from cache when the rate limit is exceeded or always get a cached value to spare your rate limits.

Guzzle Middlware Package

If you need to use the middleware directly outside of a Laravel project, you configure your rules as follows, which shows how flexible the middleware can be:

use hamburgscleanest\GuzzleAdvancedThrottle\RequestLimitRuleset;

$rules = new RequestLimitRuleset([
[
'host' => 'https://www.google.com',
'max_requests' => 20,
'request_interval' => 1
],
[
'host' => 'https://www.google.com',
'max_requests' => 100,
'request_interval' => 120
]
]);

And here’s how you add the middleware to your handler stack within Guzzle:

$stack = new HandlerStack();
$stack->setHandler(new CurlHandler());
$stack->push((new ThrottleMiddleware($rules))->handle());

// Pass the stack to the client
$client = new Client([
'base_uri' => 'https://www.google.com',
'handler' => $stack
]);

Laravel Package

Timo has a Laravel Wrapper package for this Guzzle middleware, which makes it easy to configure the cache and rules for use within a Laravel application.

You can use the GuzzleThrottle facade in your Laravel projects to get a new Guzzle client instance with the Guzzle rate limit caching Handler stack:

$client = GuzzleThrottle::client([
'base_uri' => 'https://www.google.com'
]);

And here’s what the example configuration looks like from the project’s README:

return [
'cache' => [
// Name of the configured driver in the Laravel cache config file / Also needs to be set when "no-cache" is set! Because it's used for the internal timers
'driver' => 'default',
// Cache strategy: no-cache, cache, force-cache
'strategy' => 'cache',
// TTL in minutes
'ttl' => 900
],
'rules' => [
[
// host (including scheme)
'host' => 'https://www.google.com',
// maximum number of requests in the given interval
'max_requests' => 20,
// interval in seconds till the limit is reset
'request_interval' => 1
],
[
// host (including scheme)
'host' => 'https://www.google.com',
// maximum number of requests in the given interval
'max_requests' => 100,
// interval in seconds till the limit is reset
'request_interval' => 120
]
]
];

  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook

Related Posts:

  • Import Laravel Vapor DNS to Cloudflare Orrison/Cumulus is an open-source package that works with Laravel Vapor to allow the user to manage their DNS records better when using Clo… Read More
  • Beautiful Log Viewer for Laravel Laravel Log Viewer is a fast and beautiful Log Viewer written by Arunas Skirius:Log Viewer supports multiple logs! You can see si… Read More
  • A Laravel Package to Protect Routes With a PIN Code Require Pin is a Laravel package for pin confirmation and validation before processing requests to a specified route. This package provides… Read More
  • A PHP SDK for the Dolby API PHP SDK for the Dolby API is a PHP package by Andréia Bohner that provides a wrapper around the Dolby API:For example, Dolby… Read More
  • Mail SPF Checker for Laravel The Laravel Mail SPF Checker is a package to check if you can send an e-mail through a given mail server in the name of a given e-mail… Read More
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • Write API Integrations in Laravel and PHP Projects with Saloon
    Write API Integrations in Laravel and PHP Projects with Saloon Saloon  is a Laravel/PHP package that allows you to write your API integratio...
  • Features CodeIgniter
    Features CodeIgniter There is a great demand for the CodeIgniter framework in PHP developers because of its features and multiple advan...
  • Laravel Breeze with PrimeVue v4
    This is an follow up to my previous post about a "starter kit" I created with Laravel and PrimeVue components. The project has b...
  • Fast Excel Package for Laravel
      Fast Excel is a Laravel package for importing and exporting spreadsheets. It provides an elegant wrapper around Spout —a PHP package to ...
  • Send message via CANBus
    After some years developing for mobile devices, I've started developing for embedded devices, and I'm finding a new problem now. Th...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (68)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • September (100)
  • August (50)
  • July (56)
  • June (46)
  • May (59)
  • April (50)
  • March (60)
  • February (42)
  • January (53)
  • December (58)
  • November (61)
  • October (39)
  • September (36)
  • August (36)
  • July (34)
  • June (34)
  • May (36)
  • April (29)
  • March (82)
  • February (1)
  • January (8)
  • December (14)
  • November (41)
  • October (13)
  • September (5)
  • August (48)
  • July (9)
  • June (6)
  • May (119)
  • April (259)
  • March (122)
  • February (368)
  • January (33)
  • October (2)
  • July (11)
  • June (29)
  • May (25)
  • April (168)
  • March (93)
  • February (60)
  • January (28)
  • December (195)
  • November (24)
  • October (40)
  • September (55)
  • August (6)
  • July (48)
  • May (2)
  • January (2)
  • July (6)
  • June (6)
  • February (17)
  • January (69)
  • December (122)
  • November (56)
  • October (92)
  • September (76)
  • August (6)

  • Failed to install 'cordova-plugin-firebase': CordovaError: Uh oh - 9/21/2024
  • pyspark XPath Query Returns Lists Omitting Missing Values Instead of Including None - 9/20/2024
  • SQL REPL from within Python/Sqlalchemy/Psychopg2 - 9/20/2024
  • MySql Explain with Tobias Petry - 9/20/2024
  • How to combine information from different devices into one common abstract virtual disk? [closed] - 9/20/2024

Laravel News

  • Test Deferred Operations Easily with Laravel's withoutDefer Helper - 6/18/2025

Copyright © 2025 CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda