您可以使用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運行環境的詳細資料,請參見環境說明。