1. Go to this page and download the library: Download tomaj/nette-api library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
tomaj / nette-api example snippets
$router[] = new Route('/api/v<version>/<package>[/<apiAction>][/<params>]', 'Api:Api:default');
namespace App\MyApi\v1\Handlers;
use Tomaj\NetteApi\Handlers\BaseHandler;
use Tomaj\NetteApi\Response\JsonApiResponse;
use Tomaj\NetteApi\Response\ResponseInterface;
class UsersListingHandler extends Basehandler
{
private $userRepository;
public function __construct(UsersRepository $userRepository)
{
parent::__construct();
$this->userRepository = $userRepository;
}
public function handle(array $params): ResponseInterface
{
$users = [];
foreach ($this->userRepository->all() as $user) {
$users[] = $user->toArray();
}
return new JsonApiResponse(200, ['status' => 'ok', 'users' => $users]);
}
}
namespace App\MyApi\v1\Transformers;
use League\Fractal\TransformerAbstract;
class UserTransformer extends TransformerAbstract
{
public function transform($user)
{
return [
'id' => $user->id,
'email' => $user->email,
'name' => $user->name,
];
}
}
namespace App\MyApi\v1\Handlers;
use Tomaj\NetteApi\Handlers\BaseHandler;
use Tomaj\NetteApi\Response\JsonApiResponse;
use Tomaj\NetteApi\Response\ResponseInterface;
class UsersListingHandler extends Basehandler
{
private $userTransformer;
public function __construct(UserTransformer $userTransformer)
{
parent::__construct();
$this->userTransformer = $userTransformer;
}
public function handle(array $params): ResponseInterface
{
$users = $this->useRepository->all();
$resource = new Collection($users, $this->userTransformer);
$result = $this->getFractal()->createData($resource)->toArray();
return new JsonApiResponse(200, $result);
}
}
namespace App\MyApi\v1\Handlers;
use Tomaj\NetteApi\Handlers\BaseHandler;
use Tomaj\NetteApi\Params\GetInputParam;
use Tomaj\NetteApi\Response\JsonApiResponse;
use Tomaj\NetteApi\Response\ResponseInterface;
class UsersDetailHandler extends Basehandler
{
private $userRepository;
public function __construct(UsersRepository $userRepository)
{
parent::__construct();
$this->userRepository = $userRepository;
}
public function params(): array
{
return [
(new GetInputParam('id'))->setRequired(),
];
}
public function handle(array $params): ResponseInterface
{
$user = $this->userRepository->find($params['id']);
if (!$user) {
return new JsonApiResponse(404, ['status' => 'error', 'message' => 'User not found']);
}
return new JsonApiResponse(200, ['status' => 'ok', 'user' => [
'id' => $user->id,
'email' => $user->email,
'name' => $user->name,
]);
}
}
use Nette\Application\Responses\TextResponse;
use Tomaj\NetteApi\RateLimit\RateLimitInterface;
use Tomaj\NetteApi\RateLimit\RateLimitResponse;
class MyRateLimit implements RateLimitInterface
{
public function check(): ?RateLimitResponse
{
// do some logic here
// example outputs:
return null; // no rate limit
return new RateLimitResponse(60, 50); // remains 50 of 60 hits
return new RateLimitResponse(60, 0, 120); // remains 0 of 60 hits, retry after 120 seconds
return new RateLimitResponse(60, 0, 120, new TextResponse('My custom error message')); // remains 0 of 60 hits, retry after 120 seconds, with custom TextResponse (default is Json response, see ApiPresenter::checkRateLimit())
}
}
use Nette\Application\UI\Presenter;
use Tomaj\NetteApi\ApiDecider;
use Tomaj\NetteApi\Component\ApiConsoleControl;
use Tomaj\NetteApi\Component\ApiListingControl;
use Tomaj\NetteApi\Link\ApiLink;
class MyPresenter extends Presenter
{
private $apiDecider;
private $apiLink;
private $method;
private $version;
private $package;
private $apiAction;
public function __construct(ApiDecider $apiDecider, ApiLink $apiLink = null)
{
parent::__construct();
$this->apiDecider = $apiDecider;
$this->apiLink = $apiLink;
}
public function renderShow(string $method, int $version, string $package, ?string $apiAction = null): void
{
$this->method = $method;
$this->version = $version;
$this->package = $package;
$this->apiAction = $apiAction;
}
protected function createComponentApiListing(): ApiListingControl
{
$apiListing = new ApiListingControl($this->apiDecider);
$apiListing->onClick[] = function ($method, $version, $package, $apiAction) {
$this->redirect('show', $method, $version, $package, $apiAction);
};
return $apiListing;
}
protected function createComponentApiConsole()
{
$api = $this->apiDecider->getApi($this->method, $this->version, $this->package, $this->apiAction);
$apiConsole = new ApiConsoleControl($this->getHttpRequest(), $api->getEndpoint(), $api->getHandler(), $api->getAuthorization(), $this->apiLink);
return $apiConsole;
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.