全部產品
Search
文件中心

:HTTP請求處理常式(HTTP Handler)

更新時間:Jul 06, 2024

您可以使用HTTP Handler更方便地處理HTTP請求。當調用函數時,Function Compute使用您提供的執行方法來處理HTTP請求。本文介紹了PHP HTTP請求處理常式的結構和使用樣本等。

HTTP Handler簽名

PHP的HTTP Handler簽名如下。您只需實現一個函數,就能響應HTTP請求。

<?php
use RingCentral\Psr7\Response;

function handler($request, $context): Response{
    /*
    $body       = $request->getBody()->getContents();
    $queries    = $request->getQueryParams();
    $method     = $request->getMethod();
    $headers    = $request->getHeaders();
    $path       = $request->getAttribute("path");
    $requestURI = $request->getAttribute("requestURI");
    $clientIP   = $request->getAttribute("clientIP");
    */
    return new Response(
        200,
        array(
            'custom_header1' => 'v1',
            'custom_header2' => ['v2', 'v3'],
            'Content-Type' => 'text/plain',
        ),
        'hello world'
    );
}    

樣本解析如下:

  • handler:HTTP Handler名稱。

  • $request:HTTP請求結構體。

  • Response:HTTP返回結構體。

  • $context:上下文資訊。具體資訊,請參見上下文

HTTP請求結構體

$request參數遵循PSR(HTTP message interfaces)標準。更多資訊,請參見PSR-7-http-message。具體的代碼定義遵循PSR Http Message

$request參數攜帶的可用資訊程式碼範例如下:

<?php
    $queries = $request->getQueryParams();
    $method = $request->getMethod();
    $headers = $request->getHeaders();
    $path = $request->getAttribute("path");
    $requestURI = $request->getAttribute("requestURI");
    $clientIP = $request->getAttribute("clientIP");
    $body = $request->getBody()->getContents();

參數

類型

描述

$headers

Array

存放來自HTTP用戶端的索引值對,索引值對中的值為數群組類型,遵循PSR-7標準。

$path

String

HTTP URL中的路徑。

$queries

Array

存放來自HTTP URL中的查詢部分的索引值對,索引值對中的值可以是字串或數組。

$method

String

HTTP方法。

$clientIP

String

HTTP用戶端的IP地址。

$requestURI

String

請求中除host以外的URL。

$body

String

HTTP請求中的請求體資料。

說明

Headers索引值對中的key中包含以下欄位或以x-fc-開頭的key均會被忽略,因此,不支援自訂。

  • connection

  • keep-alive

HTTP響應結構體

$request參數遵循PSR(HTTP message interfaces)標準。以下代碼為HTTP響應結構體建構函式。

<?php
/**
     * @param int    $status  Status code for the response, if any.
     * @param array  $headers Headers for the response, if any.
     * @param mixed  $body    Stream body.
     */
    public function __construct(
        $status = 200,
        array $headers = array(),
        $body = null,
    )
    {
       //...
    }
說明

$body可以是字串,也可以是Stream。如果使用Stream格式,必須要實現PSR-7-http-message標準中的StreamInterface API介面。

PHP HTTP函數樣本

下文程式碼範例示範了如何使用HTTP函數中的$request$Response

<?php
use RingCentral\Psr7\Response;
function handler($request, $context): Response{
    $body = $request->getBody()->getContents();
    $queries = $request->getQueryParams();
    $method = $request->getMethod();
    $headers = $request->getHeaders();
    $path = $request->getAttribute("path");
    $requestURI = $request->getAttribute("requestURI");
    $clientIP = $request->getAttribute("clientIP");

    $params = array(
        'method' => $method,
        'clientIP' => $clientIP,
        'requestURI' => $requestURI,
        'path' => $path,
        'queriesMap' => $queries,
        'headersMap' => $headers,
        'body' => $body,
    );

    $respHeaders = array('Content-Type' => 'application/json');
    $respBody = json_encode($params);
    return new Response(200, $respHeaders, $respBody);
}  

限制說明

  • 要求節流

    如果超過以下限制,會返回400狀態代碼和InvalidArgument錯誤碼。

    欄位

    限制說明

    HTTP狀態代碼

    錯誤碼

    headers

    要求標頭中的所有鍵和值的總大小不能超過8 KB。

    400

    InvalidArgument

    path

    請求路徑以及所有查詢參數的總大小不能超過4 KB。

    body

    同步調用請求的Body的總大小不能超過32 MB,非同步呼叫請求的Body的總大小不能超過128 KB。

  • 響應限制

    如果超過以下限制,會返回502狀態代碼和BadResponse錯誤碼。

    欄位

    限制說明

    HTTP狀態代碼

    錯誤碼

    headers

    回應標頭中的所有鍵和值對的大小不能超過8 KB。

    502

    BadResponse

更多資訊

PHP運行環境的詳細資料,請參見環境說明