Implementace REST API pomocí Drahak/Restful

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Shampoo
Člen | 38
+
0
-

Ahoj,

programoval jsem mobilní aplikaci, která by měla umět zaslat požadavek o synchronizaci DB z webové aplikace, která běží na Nette.

V současné době se snažím rozchodit vůbec REST api v Nette. Našel jsem si hotové řešení Drahak/Restful, nicméně mám problém hned z počátku.

Řekněme, že jsem vytvořil adresářovou strukturu pro modul „RestApiModule“, kde mám presenter SyncPresenter.
Mám tedy nadefinované routy, které můžu testovat na localhostu:

  • GET localhost/sync/all
  • POST localhost/sync/createSample
  • PUT localhost/sync/updateSample
  • DELETE localhost/sync/deleteSample

Tyto akce zatím slouží jen pro debug, abych zjistil, zda mi vůbec API funguje.
Routy se generují automaticky, viz. můj config.neon

Prvně bych se chtěl zeptat, jak se projeví vygenerovaná routa, kdybych v config.neon nastavil prefix např. „sync“ – v dokumentaci to nemůžu vůbec najít.

Dále mám právě problém se samotným fungováním API. K testování používám Chrome rozšíření: Rest Console Pokud zadám jakýkoliv request, např. http://localhost/…createSample (zvolím metodu POST), tak Nette vrátí error 404 s message „Cannot load presenter ‚RestApi:Sync‘, class ‚App\RestApiModule\Presenters\SyncPresenter‘ was not found.“
Presenter na konkrétní URL existuje.

Může mi někdo zaslat nějaký tutoriál, kde se řeší REST API v Nette (jakékoliv rozšíření), nebo poradit, kde může být problém?
Moc díky, budu rád za jakoukoliv radu.

David Matějka
Moderator | 6445
+
0
-

Bud ten presenter presun do namespace, kde ho nette ocekava dle nastaveneho mappingu, nebo si pridej mapping vlastni, konkretne pod ten v neonu:

RestApi: RestApiModule\*Presenter
Casper
Člen | 253
+
+1
-

Když tam vidím to PUT localhost/sync/updateSample, tak před implementací RESTové API doporučuju pročíst nějaké články jak to dělat správně :) Například tento není špatný.

Shampoo
Člen | 38
+
0
-

David Matějka napsal(a):

Bud ten presenter presun do namespace, kde ho nette ocekava dle nastaveneho mappingu, nebo si pridej mapping vlastni, konkretne pod ten v neonu:

RestApi: RestApiModule\*Presenter

Přidal jsem tam ten mapping, nicméně ten defaultní by měl ten přidaný obsáhnout. Stále to ale nevyřešilo problém.

Poznatek: Když zkusím použít při stejné URL jinou request metodu, tak mi Drahak vyhodí exception, že při této routě není tato metoda dostupná a vypíše, jakou metodu mám pro danou routu v anotaci. Čili, Nette ten presenter vidí, ale jakmile požádám správnou metodou, tak dělá, jako kdyby tam nebyl. Nechápu.

Editoval Shampoo (8. 6. 2015 18:13)

David Matějka
Moderator | 6445
+
+1
-

Ale ty mas ten SyncPresenter v namespace RestApiModule

Shampoo
Člen | 38
+
0
-

Jo, jasný, jakmile jsem nastavil namespace App\RestApiModule\Presenters;, tak to začlo fungovat. Díky
A ještě otázka k těm prefixům? Kde se v URI nastavený prefix uplatní?

Editoval Shampoo (8. 6. 2015 18:47)

Shampoo
Člen | 38
+
0
-

Ještě jedna mini otázečka.
Lze nějak odeslat odpověď s jiným návratovým kódem (např. že jsem zvalidoval vstup a chci zaslat 4xx kód)?

Zde jsem našel nějakou zmíňku o json, nicméně si myslím, to není to, co hledám.