Nové API existující aplikace

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

Zdravím, mám dotaz na zkušenější Nettisty. Mám běžící aplikaci postavenou na Nette a Doctrine 2. Představa frontendáře je taková, že postupně přejdeme na übertrendy tlustého klienta v prohlížeči. Potřebuji tedy na aplikaci napasovat další rozhraní, tj. JSON API. Komplet, nic jako snippety, regulérní API se vším všudy. Chvílí pak obě verze poběží vedle sebe a pak se původní verze vypne a z mého pohledu z aplikace zbude jen API server.

Mám následující otázky:

  1. Metody API se budou dost podobat současným akcím presenterů. Je realistické, že by stačila výměna view? Jak generujete JSON výstupy vy?
  2. Máte zkušenosti s tímto psaním interního AJAX API existujících aplikací? Jaké?
  3. Má cenu držet se Nette, nebo mám použít třeba jen routy, model a cache a dostavět si to sám?

Podělte se prosím o své zkušenosti a postřehy. Díky!

norbe
Backer | 405
+
0
-
  1. Můžeš využít JsonResponse:
$this->sendResponse(new JsonResponse($data));
  1. Teprv se na něco takového chystám až bude čas, takže moc neporadím. Pár postřehů můžeš najít v tématu o ExtJs zde na fóru.
Jan Tvrdík
Nette guru | 2595
+
0
-

Napiš si vlastní implementaci IPresenter. Je zbytečné používat tak velkou třídu jako je Presenter, když nehodláš použít jedinou komponentu.

Filip Procházka
Moderator | 4668
+
0
-

Napadlo mě, že by mohlo být zajímavé, udělat kompilátor .latte.js a posílat šablony klientovi, někam si je třeba kešovat a pak posílat JSONem data, co předáváš šabloně

public function sendTemplate()
{
	// přibalím šablony
	$this->payload->templates = $this->template->packToJSON();

	// přibalím předané data
	$this->payload->templateParams = $this->template->getParams();

	// odešlu
	$this->sendPayload();
}

Kdyby se odesílaly jenom třeba nějaké odkazy a měl by jsi router, který by poskytoval pouze šablony, dalo by se to parádně kešovat u klienta. Samozřejmě by nesmělo být v šablonách žádné {? } apod :)

PJK
Člen | 70
+
0
-

Kdyby se odesílaly jenom třeba nějaké odkazy a měl by jsi router, který by poskytoval pouze šablony, dalo by se to parádně kešovat u klienta. Samozřejmě by nesmělo být v šablonách žádné {? } apod :)

To jsme se asi nepochopili, já budu odesílat jenom data v JSONu :). Všechno ostatní se bude distribuovat z CDN. Je to prakticky přesun view ke klientovi (+ změna view enginu).

Filip Procházka
Moderator | 4668
+
0
-

Noo tak nějak jsem to myslel s tím routerem, jenom jsem se špatně vyjádřil :) ten router na šablony měl být to tvoje CDN :)