- Still WIP on Api's wrapper

This commit is contained in:
Dave Mc Nicoll committed 2023-10-27 18:33:33 -04:00
1 parent 7e69a09e7f
commit 5d9c0f0dbf
16 files changed
+548 -42

No files matched your search

+8 -10
View File
@@ -3,12 +3,9 @@
namespace Ulmus\Api\Transport;
use Ulmus\Api\Common\{ ContentTypeEnum, MethodEnum, HttpHeaderEnum };
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Ulmus\Api\Response\JsonResponse;
use Ulmus\Api\Response\Response;
use Ulmus\Api\Request\Stream;
use Ulmus\Attribute\Obj\Method;
use Ulmus\Api\Stream\Stream;
use Psr\Http\Message\{ RequestInterface, ResponseInterface };
use Ulmus\Api\Response\{ Response, JsonResponse };
abstract class CurlTransport {
@@ -52,16 +49,16 @@ abstract class CurlTransport {
return $this->request(MethodEnum::Put, $url, $data, $headers, $curlOptions);
}
public function fromRequest(ServerRequestInterface $request) : ResponseInterface
public function fromRequest(RequestInterface $request) : ResponseInterface
{
return $this->request($request->getMethod(), $request->getUri(), $request->getBody()->getContents(), $request->getHeaders());
return $this->request(MethodEnum::from($request->getMethod()), $request->getUri(), $request->getBody()->getContents(), $request->getHeaders());
}
public function request(MethodEnum $method, string $url, mixed $data = null, array $headers = [], array $options = []) : ResponseInterface
{
$response = new Response();
$headers = HttpHeaderEnum::normalizeHeaderArray($headers + $this->headers);
$headers = array_merge_recursive(HttpHeaderEnum::normalizeHeaderArray($headers), HttpHeaderEnum::normalizeHeaderArray($this->headers));
$options += $this->curlOptions;
@@ -83,6 +80,7 @@ abstract class CurlTransport {
CURLOPT_HEADERFUNCTION => function($curl, $headerLine) use (& $response) {
if ( strpos($headerLine, ':') ) {
list($key, $value) = array_map('trim', explode(':', $headerLine));
$response = $response->withHeader($key, $value);
}
elseif ( strtoupper(substr($headerLine, 0, 4)) === 'HTTP' ) {
@@ -145,7 +143,7 @@ abstract class CurlTransport {
switch($this->contentType) {
case ContentTypeEnum::Json:
$options[CURLOPT_POSTFIELDS] = json_encode($data, JsonResponse::DEFAULT_JSON_ENCODING_FLAGS);
$options[CURLOPT_POSTFIELDS] = json_encode(is_string($data) && empty($data) ? new \stdClass() : $data, JsonResponse::DEFAULT_JSON_ENCODING_FLAGS);
$headers['Accept'] ??= $this->contentType->value;
break;