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: