


Comment utiliser PHP7.0 pour implémenter une passerelle API avec une architecture de microservices ?
Avec la popularité du cloud computing et de l'architecture des microservices, la passerelle API est un élément indispensable du système de microservices et ses fonctions deviennent de plus en plus importantes. La passerelle API peut intercepter et transmettre toutes les demandes entrant et sortant du système et est responsable de la sécurité, du contrôle d'accès, du contrôle du trafic, de l'équilibrage de charge et d'autres fonctions.
Dans cet article, nous présenterons comment implémenter une passerelle API simple en utilisant PHP7.0 pour réaliser les fonctions suivantes :
- Routage : basé sur le demandé Les méthodes URL et HTTP transmettent la requête au microservice correspondant.
- Limitation actuelle : Limitez la fréquence et le nombre de simultanéités de chaque appel API.
- Authentification et autorisation : identifiez et vérifiez l'identité de la demande, et contrôlez l'accès en fonction du rôle et des autorisations de l'utilisateur.
- Statistiques : Enregistrez et analysez l'utilisation de l'API afin d'identifier les goulots d'étranglement potentiels.
Avant de commencer, assurez-vous d'avoir installé le logiciel suivant :
- PHP7.0 ou supérieur.
- Composer : Gestionnaire de packages pour PHP.
- Guzzle : Bibliothèque PHP pour les requêtes HTTP.
- Redis : Une base de données clé-valeur en mémoire utilisée pour stocker les jetons et les compteurs de limite actuelle.
Étape 1 : Écrire une passerelle API de base
Tout d'abord, nous devons créer une passerelle API de base pour acheminer les requêtes vers les microservices. Nous utiliserons Symfony Routing Component pour gérer le routage.
Créez un nouveau fichier PHP, par exemple index.php, et ajoutez le code suivant :
require_once 'vendor/autoload.php'; use SymfonyComponentRoutingRouteCollection; use SymfonyComponentRoutingRoute; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingMatcherUrlMatcher; use SymfonyComponentRoutingExceptionResourceNotFoundException; $routes = new RouteCollection(); $routes->add('hello', new Route('/hello/{name}', array( 'controller' => function ($request) { return new Response(sprintf("Hello, %s!", $request->attributes->get('name'))); } ))); $matcher = new UrlMatcher($routes, getRequest()); try { $request = Request::createFromGlobals(); $parameters = $matcher->matchRequest($request); $response = call_user_func($parameters['controller'], $request); } catch (ResourceNotFoundException $exception) { $response = new Response('Not Found', Response::HTTP_NOT_FOUND); } catch (Exception $exception) { $response = new Response('An error occurred', Response::HTTP_INTERNAL_SERVER_ERROR); } $response->send();
Dans ce code, on crée une route appelée "hello", cette route transmet la demande à une méthode de contrôleur anonyme. Lorsque cette route est traitée, elle renvoie "Bonjour, {name} !" dans la réponse, où {name} est le paramètre de route.
Nous utilisons les classes Request et Response de Symfony pour créer et envoyer des requêtes et des réponses HTTP. Le composant Routing de Symfony est responsable du routage des requêtes vers les routes correspondantes et de l'appel des méthodes de contrôleur correspondantes.
À ce stade, nous pouvons exécuter ce fichier, visiter http://localhost:8080/hello/world, et vous pourrez voir le résultat "Hello, world !".
Étape 2 : Ajouter la fonction de limitation actuelle
Nous espérons que la passerelle API pourra limiter chaque requête API afin de réduire les risques de surcharge côté serveur. Pour ce faire, nous pouvons utiliser Redis pour stocker les compteurs de limitation pour chaque API.
Tout d'abord, nous devons installer Predis à l'aide de Composer, qui est une bibliothèque client Redis en PHP :
composer require predis/predis
Ensuite, ajoutez le code suivant dans index.php pour que dans Check le compteur avant chaque requête de microservice :
use PredisClient; // ... $redis = new Client(); // Limit requests to 100 per minute per user. $maxRequests = 100; $timeWindow = 60; // seconds $ip = $_SERVER['REMOTE_ADDR']; $key = "ratelimit:{$ip}"; $currentRequests = $redis->incr($key); $redis->expire($key, $timeWindow); if ($currentRequests > $maxRequests) { $response = new Response('Rate limit exceeded', Response::HTTP_TOO_MANY_REQUESTS); $response->headers->set('Retry-After', $timeWindow); $response->send(); exit; }
Dans ce code, nous utilisons le client Predis pour nous connecter au serveur Redis et utilisons l'adresse IP de chaque requête comme nom de clé. Nous fixons une limite de 100 requêtes par minute et par utilisateur et utilisons la fonction Incr pour incrémenter le compteur.
Si la valeur actuelle du compteur dépasse la limite maximale, une réponse HTTP 429 "Too Many Requests" est renvoyée et l'en-tête "Retry-After" est défini pour informer le client quand essayer la requête encore.
Étape 3 : Ajouter des fonctions d'authentification et d'autorisation
Nous devons également ajouter des fonctions d'authentification et d'autorisation de base pour chaque requête API. Pour cela nous utiliserons le standard JSON Web Token (JWT).
Pour utiliser JWT, veuillez d'abord installer la bibliothèque firebase/php-jwt :
composer require firebase/php-jwt
Ensuite, ajoutez le code suivant dans index.php pour implémenter l'authentification et l'autorisation standard JWT :
use FirebaseJWTJWT; // ... $key = 'secret'; $token = $_SERVER['HTTP_AUTHORIZATION'] ?? ''; if ($token) { try { $decoded = JWT::decode($token, $key, array('HS256')); $user_id = $decoded->sub; $roles = $decoded->roles; } catch (Exception $e) { $response = new Response('Invalid token', Response::HTTP_UNAUTHORIZED); $response->send(); exit; } // Check user roles and permissions here... } else { $response = new Response('Token required', Response::HTTP_UNAUTHORIZED); $response->send(); exit; }
Dans ce code, nous utilisons le token JWT extrait de l'en-tête HTTP pour identifier et authentifier la requête. Nous utilisons la bibliothèque JWT pour décoder le jeton et vérifier la signature et la validité. Si le jeton est valide, l'ID utilisateur et les informations sur le rôle en sont extraits et ses autorisations sont vérifiées. Si le jeton n'est pas valide, une réponse HTTP 401 « Non autorisé » est renvoyée.
Étape 4 : Ajouter une fonction de statistiques
Enfin, nous ajoutons une fonction de statistiques simple pour enregistrer l'utilisation de l'API. Pour ce faire, nous utiliserons Redis pour stocker des métriques telles que le nombre de requêtes et les temps de réponse.
Tout d'abord, nous devons installer l'extension phpredis :
sudo apt-get install php7.0-redis
Ensuite, ajoutez le code suivant dans index.php pour enregistrer les statistiques de chaque requête :
use PredisClient; // ... $redis = new Client(); $ip = $_SERVER['REMOTE_ADDR']; $key = "stats:{$ip}"; $now = time(); $timestamp = strtotime(date('Y-m-d H:i:00', $now)); $redis->zincrby($key, 1, $timestamp); $redis->expire($key, 3600);
Dans ce code, nous considérons le nombre de requêtes par adresse IP (c'est-à-dire par utilisateur) et augmentons la valeur du compteur de requêtes de 1 à l'aide de la commande ZINCRBY de Redis. Nous utilisons également la définition du délai d'expiration dans Redis pour supprimer les enregistrements expirés.
Étape 5 : Déployer API Gateway
Maintenant, nous avons ajouté des fonctions de base telles que le routage, les restrictions, l'authentification, l'autorisation et les statistiques à notre passerelle API. Nous pouvons le déployer à l'aide d'un serveur Web traditionnel comme Apache ou Nginx, ou utiliser le serveur PHP intégré pour les tests.
Tout d'abord, exécutez la commande suivante dans le terminal afin de démarrer le serveur PHP intégré et pointez-le vers notre fichier index.php :
php -S localhost:8080
Ensuite, nous pouvons Visitez http://localhost:8080/ et ajoutez des itinéraires tels que /hello/world dans le chemin de l'URL pour tester diverses fonctions de la passerelle API.
Summary
Dans cet article, nous utilisons PHP7.0 et diverses bibliothèques open source pour implémenter une passerelle API de base, et ajouter des restrictions, une authentification, une autorisation et des statistiques et d'autres fonctionnalités de base. fonctions. La passerelle API fait partie intégrante de l'architecture des microservices, ce qui peut nous aider à améliorer les performances, la sécurité et l'évolutivité.
En fait, il existe désormais de nombreuses solutions de passerelle API puissantes parmi lesquelles choisir, telles que Kong, Tyk, AWS API Gateway, etc., qui fournissent des fonctions et des intégrations plus avancées, telles que l'équilibrage de charge, la mise en cache, la sécurité, la surveillance. et gestion, etc
Cependant, il est toujours utile de savoir comment créer une passerelle API à l'aide de bibliothèques comme PHP et Symfony, et c'est une excellente option lorsque vous avez besoin de créer rapidement une passerelle API simple.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.
