Skip to content

Commit 6b45b26

Browse files
authored
35 support query parameters in api url (#36)
support query parameters in api url (e.g. for pagination)
1 parent 446e6fb commit 6b45b26

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed

src/EntityImporterDefinition.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ interface EntityImporterDefinition
2424
*/
2525
public function getName(): string;
2626

27-
/***
27+
/**
2828
* Description displayed in "Available import types" overview.
2929
*
3030
* @return string

src/Reader/ApiReader.php

+12-5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Fastbolt\EntityImporter\EntityImporterDefinition;
1212
use Fastbolt\EntityImporter\Reader\Api\PagePaginationStrategy;
1313
use Fastbolt\EntityImporter\Reader\Api\PaginationStrategy;
14+
use Fastbolt\EntityImporter\Types\ImportSourceDefinition\Api;
1415
use Fastbolt\EntityImporter\Types\ImportSourceDefinition\ImportSourceDefinition;
1516
use GuzzleHttp\Client;
1617
use GuzzleHttp\Exception\RequestException;
@@ -29,7 +30,7 @@ class ApiReader implements ReaderInterface
2930

3031
private EntityImporterDefinition $importerDefinition;
3132

32-
private ImportSourceDefinition $importSourceDefinition;
33+
private ImportSourceDefinition|Api $importSourceDefinition;
3334

3435
private array $options;
3536

@@ -54,9 +55,12 @@ public function __construct(
5455
) {
5556
$this->clientFactory = $clientFactory;
5657
$this->importerDefinition = $importerDefinition;
57-
$this->importSourceDefinition = $importerDefinition->getImportSourceDefinition();
5858
$this->options = $options;
5959

60+
/** @var Api $apiTmp */
61+
$apiTmp = $importerDefinition->getImportSourceDefinition();
62+
$this->importSourceDefinition = $apiTmp;
63+
6064
Assert::keyExists($this->options, 'api_key');
6165

6266
if (!isset($this->options['pagination_strategy'])) {
@@ -120,23 +124,26 @@ public function valid(): bool
120124
*/
121125
private function loadBulkData(int $offset): void
122126
{
127+
/** @var Api $importSourceDefinition */
128+
$importSourceDefinition = $this->importSourceDefinition;
123129
$clientFactory = $this->clientFactory;
124130
$client = $clientFactory();
125131

126132
/** @var PaginationStrategy $paginationStrategy */
127133
$paginationStrategy = $this->options['pagination_strategy'];
128134
$paginationParameters = $paginationStrategy->getRequestParameters($offset);
135+
$queryParameters = $importSourceDefinition->getQueryParameters();
129136
$requestParameters = array_merge_recursive(
130137
[
131138
'verify' => false,
132139
'headers' => [
133140
'Accept' => 'application/json',
134-
'X-AUTH-TOKEN' => $this->importSourceDefinition->getOptions()['api_key'],
141+
'X-AUTH-TOKEN' => (string) $importSourceDefinition->getOptions()['api_key'],
135142
],
136143
],
137-
$paginationParameters
144+
array_merge_recursive($queryParameters, $paginationParameters)
138145
);
139-
$url = $this->importSourceDefinition->getSource();
146+
$url = $importSourceDefinition->getSource();
140147
$requestMethod = Request::METHOD_GET;
141148

142149
try {

src/Types/ImportSourceDefinition/Api.php

+19-4
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,25 @@ class Api implements ImportSourceDefinition
2222
*/
2323
private array $options;
2424

25+
/*
26+
* @var array<array-key, mixed>
27+
*/
28+
private array $queryParameters;
29+
2530
private bool $throwOnSourceUnavailable = true;
2631

2732
/**
28-
* @param string $apiHost
29-
* @param string $apiPath
30-
* @param array<string,mixed> $options
33+
* @param string $apiHost
34+
* @param string $apiPath
35+
* @param array<string,mixed> $options
36+
* @param array<string,string> $queryParameters
3137
*/
32-
public function __construct(string $apiHost, string $apiPath, array $options)
38+
public function __construct(string $apiHost, string $apiPath, array $options, array $queryParameters = [])
3339
{
3440
$this->options = $options;
3541
$this->apiHost = $apiHost;
3642
$this->apiPath = $apiPath;
43+
$this->queryParameters = $queryParameters;
3744
}
3845

3946
/**
@@ -72,6 +79,14 @@ public function getOptions(): array
7279
return $this->options;
7380
}
7481

82+
/**
83+
* @return array<array-key, mixed>
84+
*/
85+
public function getQueryParameters(): array
86+
{
87+
return $this->queryParameters;
88+
}
89+
7590
/**
7691
* @return ArchivingStrategy
7792
*/

0 commit comments

Comments
 (0)