Swagger OpenAPI Generator – generowanie klienta API PHP na przykładzie allegro

Swagger to platforma oprogramowania typu open source wspierana przez duży ekosystem narzędzi, który pomaga programistom projektować, budować, dokumentować i wykorzystywać usługi sieciowe RESTful.

Generator OpenAPI umożliwia generowanie bibliotek klienta API a w tym wpisie pokaże jak wygenerować i używać klienta w PHP dla nowego REST API serwisu allegro.pl

Najprostszym sposobem na skorzystanie z Generatora OpenAP jest odpalenie obrazu dockera bo nie potrzebujemy javy ani innych zależności (oczywiście poza samym dockerem :-)), a więc odpalamy:

$ docker run --rm -v ${PWD}:/local openapitools/openapi-generator-cli generate -i https://developer.allegro.pl/swagger.yaml -g php -o ./sdk 

gdzie:

-i to adres lub ścieżka do pliku swagger’a

-g to język klienta

-o to katalog wyjściowy

Po zakończeniu w katalog sdk powinien znajdować się wygenerowany klient w tym testy. Całość wygląda tak:

ircykk@ircykk:~/tmp/openapi$ tree
.
├── ...
└── sdk
    ├── composer.json
    ├── composer.lock
    ├── docs
    ├── git_push.sh
    ├── lib
    ├── phpunit.xml.dist
    ├── README.md
    ├── test
    └── vendor

Kiedy mam już gotowego klienta API możemy zacząć zabawę czyli dobrać się API i wysłać pierwsze zapytania. Żeby przetestować naszego klienta musimy jeszcze wygenerować autoload composera i zainstalować jakiegoś klienta HTTP:

$ cd sdk
$ composer dump-autoload
$ composer require guzzlehttp/guzzle

Możemy już wykonywać zapytania do API, musimy na początek się autoryzować na jeden z dostępnych sposobów ale tego procesu nie będę opisywał. Po poprawnej autoryzacji mamy access_token który musimy podać w nagłówku każdego zapytania. Poniżej przykład kodu który zwróci nam listę dostępnych kategorii najwyższego rzędu:

require_once(__DIR__ . '/sdk/vendor/autoload.php');

$configuration = (new \OpenAPI\Client\Configuration())
    ->setHost('https://api.allegro.pl.allegrosandbox.pl')
    ->setAccessToken('************');

$categoriesAndParametersApi = new \OpenAPI\Client\Api\CategoriesAndParametersApi(
    new \GuzzleHttp\Client(),
    $configuration
);

$categoriesDto = $categoriesAndParametersApi->getCategoriesUsingGET();

foreach ($categoriesDto->getCategories() as $category) {
    echo $category->getName() . "\n";
}

wynik:

ircykk@ircykk:~/tmp/openapi$ php ../example.php
Dom i Ogród
Dziecko
Elektronika
Firma
Kody i doładowania
Kolekcje i sztuka
Kultura i rozrywka
Moda
Motoryzacja
Ogłoszenia i usługi
Sport i turystyka
Supermarket
Uroda
Zdrowie

Przydatne linki:

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *