Preskočiť na obsah

Architektúra ​

Každá API požiadavka ide do jedného presentera, Tomaj\NetteApi\Presenters\ApiPresenter. Ten sa spýta ApiDecider, ktorý endpoint sa zhoduje, spustí kontroly v pevnom poradí a vráti to, čo vytvoril handler alebo error handler.

Otvoriť diagram v plnej veľkosti

Časti ​

ČasťTrieda alebo rozhranieÚloha
PresenterApiPresenterSpúšťa všetky kroky nižšie. Je final.
Zoznam endpointovApiDecideraddApi() registruje endpointy, getApi() nájde ten pre požiadavku.
EndpointEndpointIdentifierMetóda, verzia, balík a voliteľná akcia.
HandlerApiHandlerInterface, zvyčajne BaseHandlerDeklaruje parametre a výstupy, robí samotnú prácu.
AutorizáciaApiAuthorizationInterfaceRozhodne, či požiadavka smie bežať.
Obmedzenie požiadaviekRateLimitInterfaceVoliteľné, pre každý endpoint.
ChybyErrorHandlerInterface, DefaultErrorHandlerZmení zlyhania na JSON odpovede.
Kontrola výstupovConfiguratorInterfaceRozhodne, či sa výstupy validujú a zobrazujú detaily chýb.
LoggerApiLoggerInterfaceVoliteľný, hľadá sa v DI kontajneri.

Poradie krokov ​

Stručne: CORS hlavičky, nájdenie endpointu (404), obmedzenie požiadaviek (429), načítanie parametrov, autorizácia (401), chyby parametrov (400), handler, kontrola výstupu (500) a logovanie. Parametre sa načítajú pred autorizáciou, ich chyby sa však hlásia až po nej, takže volajúci bez prístupu dostane 401 a žiadne podrobnosti o parametroch.

Celé poradie s kódom a výstupom každého kroku je na jednej stránke: Spracovanie v ApiPresenteri.

Otvoriť diagram v plnej veľkosti

Nie každá odpoveď sa loguje

Kroky obmedzenia požiadaviek, autorizácie a chýb parametrov skončia predčasne, takže 429, 401, 400 a 500 zo zlyhanej autorizácie sa v 3.x k loggeru nedostanú. 404, odpovede handlera a chyby handlera alebo výstupu sa logujú.

Časté otázky ​

Môžem ApiPresenter nahradiť vlastným presenterom? ​

Nie dedením, trieda je final. Môžete ho nakonfigurovať (setCorsHeader()) a vymeniť jeho závislosti: error handler, konfigurátor a logger. Pozrite si Spracovanie chýb.

Prečo požiadavka so zlým tokenom aj zlými parametrami vráti 401 a nie 400? ​

Autorizácia beží skôr, ako sa nahlásia chyby parametrov. Pozrite si krok 6 vyššie a stránku Autorizácia.

Vytvára sa handler každého endpointu pri každej požiadavke? ​

Nie. Keď do addApi() odovzdáte názov triedy, handler sa vezme z DI kontajnera až pri volaní jeho endpointu. Pozrite si Handlery.

Ako vyzerá odpoveď neznámeho endpointu? ​

404 s {"status":"error","message":"Unknown api endpoint"}. Testuje to príklad hello world.

Kde nájdem všetky triedy v jednom zozname? ​

V Referencii.

Vydané pod licenciou MIT.