HTTPハンドラーを使用して、HTTPリクエストを効率的に処理できます。 関数が呼び出されると、function Computeは関数コードで指定したハンドラーを使用してHTTPリクエストを処理します。 このトピックでは、PHP HTTPハンドラーの構造と例について説明します。
HTTPハンドラーの署名
次のサンプルコードでは、PHP HTTPハンドラーの署名について説明します。 HTTPリクエストに応答する関数は1つだけ実装する必要があります。
<?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ハンドラーの名前。$request
: HTTPリクエスト構造。Response
: HTTPレスポンス構造。$context
: コンテキスト情報。 詳細は、「コンテキスト」をご参照ください。
HTTPリクエスト構造
$request
パラメーターは、HTTPメッセージインターフェイスのPHP Standards Recommendation (PSR) 標準に従います。 HTTPメッセージインターフェイスの詳細については、「PSR-7-http-message」をご参照ください。 コーディング標準の詳細については、「PSR HTTPメッセージ」をご参照ください。
次のサンプルコードは、$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();
項目 | データ型 | 説明 |
$ヘッダー | 配列 | HTTPクライアントによって送信されるキーと値のペア。 値は配列であり、PSR-7の標準に従います。 |
$パス | String | HTTP URLのパス。 |
$クエリ | 配列 | HTTP URLのクエリパラメーターのキーと値のペア。 値は文字列または配列にすることができます。 |
$メソッド | String | HTTPメソッド。 |
$clientIP | String | HTTPクライアントのIPアドレス。 |
$requestURI | String | ホスト名を除くURL。 |
$body | String | HTTPリクエストの本文。 |
キーと値のペアのkey
パラメーターは、次のいずれかのフィールドが含まれている場合、またはx-fc-
で始まる場合は無視されます。 したがって、キーパラメーターをカスタマイズすることはできません。
接続数
keep-alive
HTTPレスポンス構造
$request
パラメーターは、HTTPメッセージインターフェイスのPSR標準に従います。 次のコードは、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
フィールドには、文字列またはストリームを指定できます。 ストリームタイプのボディを使用する場合は、PSR-7-http-message標準でStreamInterface APIを実装する必要があります。
例:
次のサンプルコードは、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
パス
リクエストパスとクエリパラメーターの合計サイズは4 KBを超えることはできません。
body
同期呼び出し要求の本体の合計サイズは32 MBを超えることはできません。 非同期呼び出し要求の本体の合計サイズは128 KBを超えることはできません。
レスポンスの制限
応答が次のいずれかの制限を超えると、システムはステータスコード502とエラーBadResponseを返します。
項目
説明
HTTPステータスコード
エラーコード
headers
レスポンスヘッダーのキーと値の合計サイズは8 KBを超えることはできません。
502
BadResponse
関連ドキュメント
PHPランタイムの詳細については、「概要」をご参照ください。