您可以使用HTTP Handler更方便地處理HTTP請求。當調用函數時,函數計算使用您提供的執行方法來處理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運行環境的詳細信息,請參見環境說明。