-
Rodrigo Goncalves authoredRodrigo Goncalves authored
SmartDataContextApiClient.php 3.84 KiB
<?php
namespace Ingress\Services\smartdataapi;
use Exception;
/**
* API client for SmartDataContext API
*/
class SmartDataContextApiClient
{
private string $baseUrl;
private string $certificatePath;
private string $certificateKeyPath;
public function __construct(string $baseUrl, string $certificatePath, string $certificateKeyPath)
{
$this->baseUrl = $baseUrl;
$this->certificatePath = $certificatePath;
$this->certificateKeyPath = $certificateKeyPath;
}
private function postRequest(string $endpoint, array $data): array
{
$url = $this->baseUrl . $endpoint;
$ch = curl_init($url);
$jsonData = json_encode($data);
$headers = [
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonData),
];
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSLCERT, $this->certificatePath);
curl_setopt($ch, CURLOPT_SSLKEY, $this->certificateKeyPath);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
return ['errors' => [$error]];
}
return json_decode($response, true);
}
public function createSmartDataContext(array $request): array
{
$data = [
'command' => '/create',
'request' => $request,
];
return $this->postRequest('/api/context.php#create', $data);
}
public function associateSmartDataContext(array $request): array
{
$data = [
'command' => '/associate',
'request' => $request,
];
return $this->postRequest('/api/context.php#associate', $data);
}
public function unassociateSmartDataContext(array $request): array
{
$data = [
'command' => '/unassociate',
'request' => $request,
];
return $this->postRequest('/api/context.php#unassociate', $data);
}
public function getSmartDataContext(string $id): array
{
$data = [
'command' => '/get',
'request' => ['smartDataContextId' => $id]
];
return $this->postRequest('/api/context.php#get', $data);
}
public function getIdByIdentifier(string $signature): mixed
{
$data = [
'command' => '/query',
'request' => ['features.identifier' => $signature]
];
$result = $this->postRequest('/api/context.php#query', $data);
if (array_key_exists('result', $result) && count($result['result']) > 0) {
return $result['result'][0]['id'];
} else if (array_key_exists('errors', $result)) {
throw new Exception(json_encode($result['errors']));
} else {
return null;
}
}
public function updateSmartDataContext(string $id, array $request): array
{
$request['smartDataContextId'] = $id;
$data = [
'command' => '/update',
'request' => $request,
];
return $this->postRequest('/api/context.php#update', $data);
}
public function querySmartDataContext(array $request): array
{
$data = [
'command' => '/query',
'request' => $request,
];
return $this->postRequest('/api/context.php#query', $data);
}
public function retrieveContext(array $request): array
{
$data = [
'command' => '/contexts',
'request' => $request,
];
return $this->postRequest('/api/context.php#context', $data);
}
}