APIG Event Source¶
API Gateway (APIG) is an API hosting service that helps enterprises to build, manage, and deploy APIs at any scale. With APIG, your function can be invoked through HTTPS by using a custom REST API and a specified backend. You can map each API operation (such as, GET and PUT) to a specific function. APIG invokes the relevant function when an HTTPS request is sent to the API backend.
For more information about how to use HTTPS calls to trigger functions, see Using an APIG (Dedicated) trigger.
Example APIG Event¶
{
"body": "eyJuYW1lIjogIk9wZW5UZWxla29tQ2xvdWQifQ==",
"requestContext": {
"apiId": "bc1dcffd-aa35-474d-897c-d53425a4c08e",
"requestId": "11cdcdcf33949dc6d722640a13091c77",
"stage": "RELEASE"
},
"queryStringParameters": {
"responseType": "html"
},
"httpMethod": "GET",
"pathParameters": {},
"headers": {
"accept-language": "q=0.5,en-US;q=0.3,en;q=0.2",
"accept-encoding": "gzip, deflate, br",
"x-forwarded-port": "443",
"x-forwarded-for": "103.218.216.98",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"upgrade-insecure-requests": "1",
"host": "host",
"x-forwarded-proto": "https",
"pragma": "no-cache",
"cache-control": "no-cache",
"x-real-ip": "103.218.216.98",
"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0"
},
"path": "/",
"isBase64Encoded": true
}
Parameter description¶
Parameter |
Type |
Description |
|---|---|---|
body |
String |
Actual request body in string format (Base64 encoded). |
requestContext |
Map |
Request information, including the API gateway configuration, request ID, authentication information, and source. |
httpMethod |
String |
HTTP method |
queryStringParameters |
Map |
Query strings configured in APIG and their actual values |
pathParameters |
Map |
Path parameters configured in APIG and their actual values |
headers |
Map |
Complete headers |
path |
String |
Complete path |
isBase64Encoded |
Boolean |
Default value: true (see Notes below) |
Notes¶
When calling a function using APIG, isBase64Encoded is valued true by default, indicating that the request body transferred to FunctionGraph is encoded using Base64 and must be decoded for processing.
The function must return characters strings by using the following structure.
{ "isBase64Encoded": "true|false", "statusCode": "httpStatusCode", "headers": {"headerName":"headerValue"}, "body": "..." }
Note
For asynchronous invocation, of FunctionGraph, select the APIG trigger and click its name to go to the APIG console, and select Asynchronous for the Invocation Mode. For details, see
Asynchronous Invocation in user manual and
Configuring Backend Settings in API gateway user manual
Example¶
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use OTC\fg_apig_event\APIGEvent;
use OTC\fg_apig_event\APIGResponse;
function initializer($context)
{
$logger = $context->getLogger();
$output = 'Initializer called for function: ' . $context->getFunctionName();
$logger->debug($output);
return $output;
}
function handler($event, $context)
{
$logger = $context->getLogger();
$logger->info('Function Name: ' . $context->getFunctionName());
$apigEvent = new APIGEvent($event);
$isBase64Encoded = $apigEvent->isBase64Encoded();
$body = $apigEvent->getBody();
$logger->info('APIG Event body: ' . $body);
$responseType = $apigEvent->getQueryStringParameter('responseType');
if ($responseType === 'html') {
$output = new APIGResponse(200, '', ['Content-Type' => 'text/html; charset=utf-8']);
$output->setBody('<html><h1>Welcome to use FunctionGraph</h1></html>', $isBase64Encoded);
} elseif ($responseType === 'json') {
$output = new APIGResponse(200, '', ['Content-Type' => 'application/json']);
$cleaned = str_replace('\\"', '"', $body ?? '');
$parsed = json_decode($cleaned, true);
if (json_last_error() !== JSON_ERROR_NONE) {
$output->setBody(['error' => 'Invalid JSON input'], $isBase64Encoded);
} else {
$output->setBody($parsed, $isBase64Encoded);
}
} else {
$output = new APIGResponse(200, '', ['Content-Type' => 'text/html; charset=utf-8']);
$output->setBody(
'<html>Please construct the url with query parameters responseType=html, responseType=json</html>',
$isBase64Encoded,
);
}
$logger->info('returning: ' . json_encode($output->toJson()));
return $output->toJson();
}
Full sample code is available in the samples-doc/scratch-event-apig.