Anda dapat menggunakan penanganan HTTP untuk memproses permintaan HTTP secara efisien. Saat sebuah fungsi dipanggil, Function Compute menggunakan penanganan yang Anda tentukan dalam kode fungsi untuk memproses permintaan HTTP. Topik ini menjelaskan struktur dan memberikan contoh penanganan HTTP PHP.
Tanda tangan untuk penanganan HTTP
Kode sampel berikut menggambarkan tanda tangan untuk penanganan HTTP PHP. Anda hanya perlu mengimplementasikan satu fungsi untuk menanggapi permintaan 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'
);
} Item berikut menggambarkan bidang dalam kode sampel:
handler: nama dari penanganan HTTP.$request: struktur permintaan HTTP.Response: struktur respons HTTP.$context: informasi konteks. Untuk informasi lebih lanjut, lihat Konteks.
Struktur permintaan HTTP
Parameter $request mengikuti standar PHP Standards Recommendation (PSR) pada antarmuka pesan HTTP. Untuk informasi lebih lanjut tentang antarmuka pesan HTTP, lihat PSR-7-http-message. Untuk informasi lebih lanjut tentang standar pengkodean, lihat PSR HTTP Message.
Kode sampel berikut menunjukkan informasi yang dibawa oleh parameter $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();Bidang | Tipe | Deskripsi |
$headers | Array | Pasangan kunci-nilai yang dikirim oleh klien HTTP. Nilainya adalah array dan mengikuti standar PSR-7. |
$path | String | Path dari URL HTTP. |
$queries | Array | Pasangan kunci-nilai dari parameter query dalam URL HTTP. Nilainya bisa berupa string atau array. |
$method | String | Metode HTTP. |
$clientIP | String | Alamat IP klien HTTP. |
$requestURI | String | URL yang tidak termasuk hostname. |
$body | String | Body dari permintaan HTTP. |
Parameter key dalam pasangan kunci-nilai diabaikan jika parameter key berisi salah satu bidang berikut atau dimulai dengan x-fc-. Oleh karena itu, Anda tidak dapat menyesuaikan parameter key.
connection
keep-alive
Struktur respons HTTP
Parameter $request mengikuti standar PSR pada antarmuka pesan HTTP. Kode berikut menunjukkan konstruktor struktur dari respons HTTP.
<?php
/**
* @param int $status Kode status untuk respons, jika ada.
* @param array $headers Header untuk respons, jika ada.
* @param mixed $body Body aliran.
*/
public function __construct(
$status = 200,
array $headers = array(),
$body = null,
)
{
//...
}Bidang $body bisa berupa string atau aliran. Jika Anda menggunakan body bertipe aliran, Anda harus mengimplementasikan API StreamInterface dalam standar PSR-7-http-message.
Contoh
Kode sampel berikut memberikan contoh cara menggunakan $request dan $Response dalam fungsi 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");
$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);
} Batasan
Batasan Permintaan
Jika permintaan melebihi salah satu batasan berikut, sistem akan mengembalikan kode status 400 dan kesalahan InvalidArgument.
Bidang
Deskripsi
Kode status HTTP
Kode kesalahan
headers
Total ukuran kunci dan nilai dalam header permintaan tidak boleh melebihi 8 KB.
400
InvalidArgument
path
Total ukuran path permintaan dan parameter query tidak boleh melebihi 4 KB.
body
Total ukuran body dari permintaan pemanggilan sinkron tidak boleh melebihi 32 MB. Total ukuran body dari permintaan pemanggilan asinkron tidak boleh melebihi 128 KB.
Batasan Respons
Jika respons melebihi salah satu batasan berikut, sistem akan mengembalikan kode status 502 dan kesalahan BadResponse.
Bidang
Deskripsi
Kode status HTTP
Kode kesalahan
headers
Total ukuran kunci dan nilai dalam header respons tidak boleh melebihi 8 KB.
502
BadResponse
Referensi
Untuk informasi lebih lanjut tentang runtime PHP, lihat Ikhtisar.