PHP規範PSR15(HTTP伺服器請求處理程式)介紹
阿新 • • 發佈:2018-11-01
本文件描述了HTTP伺服器請求處理程式(“請求處理程式”)和HTTP伺服器中介軟體元件(“中介軟體”)的常用介面,這些介面使用PSR-7或後續替換PSR所描述的HTTP訊息。
HTTP請求處理程式是任何Web應用程式的基本組成部分。伺服器端程式碼接收請求訊息,對其進行處理並生成響應訊息。 HTTP中介軟體是一種將常見請求和響應處理從應用程式層移開的方法。
本文件中描述的介面是請求處理程式和中介軟體的抽象。
注意:對“請求處理程式”和“中介軟體”的所有引用都特定於伺服器請求處理。
本文件中的關鍵詞“必須”,“必須”,“必需”,“應該”,“不應該”,“應該”,“不應該”,“推薦”,“可以”和“可選”按照RFC 2119中的描述進行解釋。
1.規格
1.1 請求處理程式
請求處理程式是處理請求並生成響應的單個元件,如PSR-7所定義。
如果請求條件阻止它生成響應,請求處理程式可能會丟擲異常。未定義異常型別。
使用此標準的請求處理程式必須實現以下介面:
Psr\Http\Server\RequestHandlerInterface
1.2 中介軟體
中介軟體元件是一個單獨的元件,通常與其他中介軟體元件一起參與處理傳入請求和建立結果響應,如PSR-7所定義。
如果滿足足夠的條件,中介軟體元件可以建立並返回響應而不委託給請求處理程式。
使用此標準的中介軟體必須實現以下介面:
Psr\Http\Server\MiddlewareInterface
1.3 生成響應
建議生成響應的任何中介軟體或請求處理程式將組成PSR-7 ResponseInterface的原型或能夠生成ResponseInterface例項的工廠,以防止依賴於特定的HTTP訊息實現。
1.4 處理例外情況
建議使用中介軟體的任何應用程式都包含一個捕獲異常並將其轉換為響應的元件。這個中介軟體應該是第一個執行的元件,幷包裝所有進一步的處理,以確保始終生成響應。
2. Interfaces
2.1 Psr\Http\Server\RequestHandlerInterface
以下介面必須由請求處理程式實現。
namespace Psr\Http\Server; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; /** * Handles a server request and produces a response * * An HTTP request handler process an HTTP request in order to produce an * HTTP response. */ interface RequestHandlerInterface { /** * Handles a request and produces a response * * May call other collaborating code to generate the response. */ public function handle(ServerRequestInterface $request): ResponseInterface; }
2.2 Psr \ Http \ Server \ MiddlewareInterface
以下介面必須由相容的中介軟體元件實現。
namespace Psr\Http\Server;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
/**
* Participant in processing a server request and response
*
* An HTTP middleware component participates in processing an HTTP message:
* by acting on the request, generating the response, or forwarding the
* request to a subsequent middleware and possibly acting on its response.
*/
interface MiddlewareInterface
{
/**
* Process an incoming server request
*
* Processes an incoming server request in order to produce a response.
* If unable to produce the response itself, it may delegate to the provided
* request handler to do so.
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface;
}