Jak na API k vlastní aplikaci

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

Ahoj,
aktuálně jsem postaven před úkol vytvořit API pro aplikace třetích stran. API musí mít rozumně implementovanou autentizaci uživatele, dále bude na základě identity uživatele vracet jeho záznamy (json, xml), bude moci uživatelské záznamy měnit včetně uploadu souborů přes API.
Zkouším laborovat s drahak/Restful, to se mi podařilo rozchodit, ale bohužel zatím bez autentizace – OAuth2 se mi zatím nechtělo doimplementovávat do vlastní aplikace (vlastní storage třídy), pak jsem zkusil v tomto rozšíření využít SecuredAuthentication, které mi stále vrací „Drahak\Restful\InvalidStateException There is no mapper for Content-Type: " … čím víc s tímto bojuji, tím si říkám , jestli není lepší použit JsonResponse a posílat data ze "standardního“ presenteru. Autentizaci bych mohl řešit pak generováním klíče v administraci a případně omezením na povolené IP adresy-rozsahy. Klíč by pak byl předán jako GET parametr.

Původně jsem chtěl použít drahak/Restful, ale čím dál více přemýšlím o druhé variantě. Nicméně tenhle dotaz píši především proto, abych se Vás zeptal, jaké prostředky pro tvorbu podobných typů API – v plánu je sada GET metod, jedna POST/PUT.

Předem díky.

chemix
Nette Core | 1310
+
0
-

Ja prozatim zvolil metodu 2. jelikoz to API co jsem poterboval udelat bylo velmi snadne, co se JSON formatu tyce tak jsem se inspiroval http://jsonapi.org a jelikoz me to tema zajimalo vic a vic tak jsem si rekl ze kvetnova PoSobota bude na toto tema :)

https://forum.nette.org/…ha-30-5-2015

oslovil jsem i autora drahak/Restful, bohuzel je to zaneprazdneny clovek :(

Šaman
Člen | 2668
+
0
-
  1. Tohle není otázka s jednoznačnou odpovědí, tohle je námět na diskuzi. Chtělo by to změnit typ příspěvku.
  2. Na květnové poslední sobotě se zrovna tvorbě API bude věnovat velká pozornost.
  3. Záleží na tom, jestli chceš plnohodnotné REST, tedy práci se zdrojem (kompletní CRUD operace), nebo jen export dat. Na export jsem si taky prošlapal cestu od složitého RESTu až po jednoduchý presenter bez jakýchkoliv cizích knihoven. Na mé zadání to stačilo a IMHO to je lepší řešení. Tvoje zadání neznám.

Editoval Šaman (11. 5. 2015 23:28)

chap
Člen | 81
+
0
-
  1. nevím kde – pokud to jde
  2. určitě se podívám na záznamy (PS: není v plánu nějaká PoSobota v Liberci? )
  3. nakonec jsem se rozhodl pro řešení přes standardní prostředky (JsonResponse a vlastní XMLResponse) … Trochu jsem ale narazil na problém autenztizace – tak to napíšu zde (když už jsem začal).

Mám abstraktní API presenter:

abstract class BaseapiPresenter extends \Nette\Application\UI\Presenter {
    public function startup() {
        parent::startup();
        $key = $this->getParameter("key", false);
        if (!$key) {
            $this->addError("Missing auth key");
        } else {
             $this->user->getStorage()->setNamespace('API');
            $this->user->setAuthenticator(new \KeyAuth());
            $this->user->login($key);
         }
    }
...

Definoval jsem si vlastní autentizátor, který testuje klíč. Ten nastavím uživateli. Pak login přes klíč ok, ale zjistil jsem že mi to při testování přepíše session přihlášeného. Vyřešil jsem to nastavením jiného namespace. To je sice funkční, ale nelíbí se mi že to využívá ty session. Rád bych využil DummyUserStorage , ale storage nemá setter … Api mám ve vlastním modulu, ale nevím jak (jestli to jde) přidat vlastní službu do neon, která by byla spuštěna jen pro daný modul (pokud to píši srozumitelně :) ) … prostě potřebuji standardní user storage pro celou aplikaci, ale pro API chci ten dummyUserStorage.

Díky

Šaman
Člen | 2668
+
0
-
  1. To mohou asi jen moderátoři. Třeba @FilipProcházka ?
  2. PoSobota nikdy v Liberci nebyla a dokud se někdo neujme organizace, tak asi ani nebude. Ale zrovna my to máme do Prahy poměrně kousek SAčkem.
  3. Já vycházel z toho, že REST je bezstavový protokol, takže si ověřuji každý požadavek zvlášť a nikoho nepřihlašuji. Takže uživatelé a API klíče jsou dvě nezávislé věci. Ale to API komunikuje jen mezi mými vlastními aplikacemi. Jestli potřebuješ opravdu zpřístupnit API třetím stranám a v závislosti na tom, kdo je autentizoval, tak se asi nastudování OAuth nevyhneš.

Editoval Šaman (12. 5. 2015 22:24)

chemix
Nette Core | 1310
+
0
-
  1. Obavam se ze to system neumi
  2. Minuly mesic byla v Budejovicich, mozna pristi rok vyrazime do Liberce, ale chce to nekoho tamniho aby poresil cast speakru z okoli, doporucil prostor a nasel super indickou :) cele to na cizim uzemi nezvladnu :) Na druhou stranu Liberec je hodka a kousek od Prahy, ne? Chapal bych Brno ;-) ale Praha? klidne nabidnu prespani at to nemas na otocku jen a muzes pak na drink…
newPOPE
Člen | 648
+
0
-

@chap tu je len routing k REST-u https://github.com/…te-RestRoute ostatne uz je na tebe alebo „urob si sám (ako potrebujes)“.