1. 程式人生 > >PHP規範PSR18(HTTP客戶端)介紹

PHP規範PSR18(HTTP客戶端)介紹

本文件描述了用於傳送HTTP請求和接收HTTP響應的通用介面。

本文件中的關鍵詞“必須”,“必須”,“必需”,“應該”,“不應該”,“應該”,“不應該”,“推薦”,“可以”和“可選”按照RFC 2119中的描述進行解釋。

1 目標

此PSR的目標是允許開發人員建立與HTTP客戶端實現分離的庫。這將使庫更可重用,因為它減少了依賴項的數量並降低了版本衝突的可能性。

第二個目標是可以根據Liskov替換原則替換HTTP客戶端。這意味著所有客戶端在傳送請求時必須以相同的方式執行。

2 定義

  • 客戶端 - 客戶端是實現此規範的庫,用於傳送與PSR-7相容的HTTP請求訊息並將與PSR-7相容的HTTP響應訊息返回到呼叫庫。
  • 呼叫庫 - 呼叫庫是使用客戶端的任何程式碼。它沒有實現此規範的介面,而是使用實現它們的物件(客戶端)。

3 客戶端

客戶端是實現ClientInterface的物件。

客戶端可以:

  • 選擇從提供的HTTP請求傳送更改的HTTP請求。例如,它可以壓縮傳出訊息體。
  • 選擇在將其返回到呼叫庫之前更改收到的HTTP響應。例如,它可以解壓縮傳入的訊息體。

如果客戶端選擇更改HTTP請求或HTTP響應,則必須確保物件保持內部一致。例如,如果客戶端選擇解壓縮訊息體,那麼它還必須刪除Content-Encoding頭並調整Content-Length頭。

請注意,因此,由於PSR-7物件是不可變的,因此呼叫庫絕不能假定傳遞給ClientInterface :: sendRequest()的物件將是實際傳送的相同PHP物件。例如,異常返回的Request物件可能與傳遞給sendRequest()的物件不同,因此無法通過引用(===)進行比較。

客戶必須:

  • 重新組合多步HTTP 1xx響應本身,以便返回到呼叫庫的是狀態程式碼200或更高的有效HTTP響應。

3 錯誤處理

客戶端不得將格式正確的HTTP請求或HTTP響應視為錯誤條件。例如,400和500範圍內的響應狀態程式碼不得導致異常,並且必須正常返回到呼叫庫。

當且僅當客戶端根本無法傳送HTTP請求或者無法將HTTP響應解析為PSR-7響應物件時,客戶端必須丟擲Psr \ Http \ Client \ ClientExceptionInterface的例項。

如果由於請求訊息不是格式正確的HTTP請求或缺少某些關鍵資訊(例如主機或方法)而無法傳送請求,則客戶端必須丟擲Psr \ Http \ Client \ RequestExceptionInterface的例項。