Download the PHP package andydefer/php-client without Composer
On this page you can find all versions of the php package andydefer/php-client. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download andydefer/php-client
More information about andydefer/php-client
Files in andydefer/php-client
Package php-client
Short Description PSR-7 compliant HTTP client with type-safe request/response handling and SOLID architecture
License MIT
Informations about the package php-client
PHP HTTP Client - Documentation Complète
📖 Introduction
PHP HTTP Client est une bibliothèque PHP moderne qui transforme les appels HTTP en objets métier typés, immutables et sécurisés.
Elle repose sur GuzzleHttp mais ajoute une couche d'abstraction qui élimine les problèmes de parsing manuel, de données non typées et de configuration dispersée.
🎯 Pourquoi ce package existe
Le problème : Les appels HTTP bruts sont fragiles
La solution : Des objets métier typés
🎯 Problèmes résolus
| Problème | Solution PHP HTTP Client |
|---|---|
| Données non typées | Objets PHP typés avec PHPDoc et readonly |
| Parsing manuel | Hydratation automatique via from() |
| Configuration dispersée | Value Objects centralisés (HeadersVO, OptionsVO) |
| Pas de standardisation | Architecture cohérente Request/Response |
| Données mutables | Immutabilité totale (readonly) |
| Pas de validation | Validation automatique des URLs, JSON, types |
🚀 Installation
Prérequis
- PHP 8.1+
- GuzzleHttp 7.0+
- extension JSON
🏗️ Architecture
Les 4 piliers
| Pilier | Rôle |
|---|---|
| Request | Encapsule la requête HTTP (méthode, URL, corps, headers, options) |
| Response | Encapsule la réponse HTTP (status, corps, headers) |
| Value Objects | Objets immutables pour headers, options, URL, corps |
| ClientService | Envoie la requête et hydrate la réponse |
📦 Composants principaux
1. Request - La requête HTTP
Une Request encapsule toutes les informations d'une requête HTTP. Elle est immutable dans sa structure (méthode, URL, corps) mais permet de configurer les headers et options.
Points clés :
setMethod(): Définit la méthode HTTP (GET, POST, etc.)setUrl(): Définit l'URL avec validation automatique viaUrlVOsetBody(): Définit le corps de la requête avec son Content-Type- Les méthodes
getHeaders()etgetOptions()sont disponibles pour la configuration
2. Response - La réponse HTTP
Une Response encapsule la réponse HTTP et fournit des méthodes métier pour y accéder.
Points clés :
getBody()->getValue()retourne l'objet structuré typé- Les méthodes
isSuccess()etisError()sont disponibles getStatusCode()retourne un enumHttpStatusCode
3. ClientService - Le client HTTP
Le ClientService est le point d'entrée. Il envoie les requêtes et retourne des réponses typées.
Méthodes disponibles :
get(),post(),put(),patch(),delete()
🔧 Value Objects
HeadersVO - Gestion des en-têtes
Les en-têtes HTTP sont gérés via un Value Object immutable.
Méthodes disponibles :
| Catégorie | Méthodes |
|---|---|
| Généraux | setHost(), setUserAgent(), setAccept(), setAcceptEncoding() |
| Authentification | setAuthorization(), setBasicAuth(), setApiKey(), setCookie() |
| Contenu | setContentType(), setContentLength(), setContentEncoding() |
| Cache | setCacheControl(), setIfModifiedSince(), setIfNoneMatch() |
| Sécurité | setXsrfToken(), setStrictTransportSecurity() |
| Personnalisés | setCustom(), setXRequestId(), setXCorrelationId() |
OptionsVO - Options de configuration
Les options de transfert sont centralisées dans un Value Object.
RequestBodyVO - Corps de requête
Le corps de requête est typé et peut être en JSON ou en formulaire.
ResponseBodyVO - Corps de réponse
Le corps de réponse est automatiquement hydraté en objet structuré.
UrlVO - URL validée
L'URL est automatiquement validée et découpée en parties.
UrlQueryVO - Paramètres de la query
📝 Enums disponibles
| Enum | Description | Valeurs |
|---|---|---|
HttpMethod |
Méthodes HTTP | GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS |
HttpStatusCode |
Codes HTTP | 100-599 avec messages standards |
ContentType |
Types de contenu | JSON, JSON_UTF8, PROBLEM_JSON, FORM |
ContentEncoding |
Encodages de contenu | GZIP, DEFLATE, BR, ZSTD, IDENTITY |
HeaderType |
Types d'en-têtes | HOST, USER_AGENT, ACCEPT, AUTHORIZATION, etc. |
OptionType |
Types d'options | TIMEOUT, CONNECT_TIMEOUT, VERIFY, etc. |
CacheControl |
Cache | NO_CACHE, NO_STORE, MAX_AGE, etc. |
ConnectionType |
Connexion | KEEP_ALIVE, CLOSE, UPGRADE |
AcceptLanguage |
Langues | FR, FR_FR, EN, EN_US, etc. |
Encoding |
Encodages caractères | UTF_8, UTF_16, ISO_8859_1, etc. |
💡 Cas d'utilisation avec JSONPlaceholder
Exemple complet : Client JSONPlaceholder
🧩 Composants avancés
Struct - Structure complète de réponse API
Struct est une structure de données complète représentant une réponse API. Elle étend HydratableStructure et ajoute des méthodes d'encodage et de décodage.
Graph - Portion de structure de réponse API
Un Graph représente une portion de structure de réponse API. Il sert à documenter et structurer les fragments d'une réponse JSON.
🔧 Options disponibles (référence complète)
Headers via HeadersVO
Options via OptionsVO
UrlVO - Manipulation d'URL
UrlQueryVO - Manipulation de query
📊 Gestion des erreurs
Exceptions possibles
| Situation | Exception | Message |
|---|---|---|
| URL invalide | InvalidArgumentException |
Invalid URL: X |
| JSON invalide | InvalidArgumentException |
Invalid JSON: Syntax error |
| Paramètre manquant | InvalidArgumentException |
Missing required parameters for X: $Y |
| Erreur Guzzle | RuntimeException |
HTTP request failed: X |
| Classe invalide | TypeError |
- |
Codes HTTP gérés via HttpStatusCode
🎯 Bonnes pratiques
1. Structurer ses requêtes avec UrlVO
2. Centraliser les URLs avec un Enum
3. Utiliser les enums pour les valeurs fixes
4. Configurer les headers dans un bloc
🔒 Sécurité
Validations automatiques
| Validation | Mécanisme |
|---|---|
| URL | FILTER_VALIDATE_URL dans UrlVO |
| JSON | json_decode() avec JSON_THROW_ON_ERROR dans ResponseBodyVO |
| Types | Conversion automatique via HydratableStructure::convertValue() |
| Enums | Enum::from() pour les valeurs d'enum |
Headers de sécurité recommandés via HeadersVO
🧪 Tests
Exemple de test
📝 Licence
MIT © Andy Defer