PSR 18 - HTTP Client

1 h Niveau 9

Objectif du PSR 18

Le but de ce PSR est de permettre aux développeurs de créer des bibliothèques découplées des implémentations clientes HTTP. Cela rendra les bibliothèques plus réutilisables, car cela réduira le nombre de dépendances et la probabilité de conflits de versions.

Un deuxième objectif est que les clients HTTP puissent être remplacés selon le principe de substitution de Liskov. Cela signifie que tous les clients doivent se comporter de la même manière lors de l'envoi d'une demande.

Définitions

  • Client - Un client est une bibliothèque qui implémente cette spécification dans le but d'envoyer des messages de demande HTTP compatibles PSR-7 et de renvoyer un message de réponse HTTP compatible PSR-7 à une bibliothèque appelante.
  • Calling Library - Une bibliothèque d'appels est tout code qui utilise un client. Il n'implémente pas les interfaces de cette spécification mais consomme un objet qui les implémente (un Client).

Client

Un Client est un objet implémentant ClientInterface.

Un client peut:

  • Envoyer une requête HTTP modifiée à partir de celle qui a été fournie. Par exemple, il pourrait compresser un corps de message sortant.
  • Modifier une réponse HTTP reçue avant de la renvoyer à la bibliothèque appelante. Par exemple, il peut décompresser le corps d'un message entrant.

Si un client choisit de modifier soit la demande HTTP, soit la réponse HTTP, il doit s'assurer que l'objet reste cohérent en interne. Par exemple, si un client choisit de décompresser le corps du message, il doit également supprimer l'en- “Content-Encoding”tête et ajuster l'en- “Content-Length”tête. Notez qu'en conséquence, puisque les objets PSR-7 sont immuables , la bibliothèque appelant ne doit pas supposer que l'objet transmis “ClientInterface::sendRequest()” sera le même objet PHP qui est réellement envoyé. Par exemple, l'objet Request qui est renvoyé par une exception peut être un objet différent de celui passé à “sendRequest()”, donc la comparaison par référence (===) n'est pas possible.Un client doit rassembler une réponse HTTP 1xx à plusieurs étapes elle-même afin que ce qui est renvoyé à la bibliothèque appelante soit une réponse HTTP valide de code d'état 200 ou supérieur.

logo discord

Besoin d'aide ?

Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !

En savoir plus