Jednoduché api pomocí jsonResponse
- lukendo
- Člen | 96
Ahoj, tvořím api k jedné aplikaci. První verze by měla umět pouze
načítat a ukládat data autorizovaným uživatelům. Zkoušel jsem několikrát zmiňovaného
Draháka, ale nepodařilo se mi jej rozchodit, tudíž jsem zkusil udělat
api přes json response, kde url vypadá:
http://localhost/mujprojekt/api/measurements/get/5/400/xml
kde api je modul, measurements – presenter, get – akce, a zbytek
parametry..
public function actionGet($id, $measurand_id, $format) {
if($id && $measurand_id && $format) {
if ($format == "xml") {
//todo xml
return $this->response($this->measurmentModel->getByObjectAndMeasurand($id, $measurand_id));
}
else {
return $this->response($this->measurmentModel->getByObjectAndMeasurand($id, $measurand_id));
}
}
else {
$this->noParams();
}
}
// $this->measurmentModel->getByObjectAndMeasurand($id, $measurand_id) -> vraci pole
private function response($data) {
return $this->sendResponse(new \Nette\Application\Responses\JsonResponse($data, "application/json;charset=utf-8"));
}
private function noParams() {
return $this->response(["code" => 400, "status" => "Invalid URL"]);
}
Tahle implementace byla poměrně jednoduchá, ale měl bych k ní pár dotazů
- vím že se nejedná vůbec o rest, nýbrž o jenom response, ale i to je forma api ne?
- viděl někdo tuhle implementaci reálně požívat?
- lze na tomhle nějak udělat autorizaci? (aby stahovali jenom ti co mohou)
- lze udělat nějak POST request (nejlépe upload souboru)
Pokud je to uplný nesmysl a nemá cenu v téhle verzi dál pokračovat, poskytl by někdo zprovozněny Sample z Draháka? Děkuji.
- lukendo
- Člen | 96
Mysteria napsal(a):
Zkus se podívat na ublaboo/api-router, používám ho k plné spokojenosti.
zkouším podle ukázky, ale hlásí mi to error
[Semantical Error] The annotation "@ApiRoute" in class App\Presenters\ApiRouterPresenter was never imported. Did you maybe forget to add a "use" statement for this annotation? search
při vstupu na tuto url
http://localhost/uplaboo/www/api/users/read/lukas
vše jsem snad nastavil správně..
- lukendo
- Člen | 96
Pavel Janda napsal(a):
@lukendo https://github.com/…uter-project :) Jednoduchý příklad použití
díky,
Editoval lukendo (29. 9. 2017 18:13)
- lukendo
- Člen | 96
lukendo napsal(a):
Pavel Janda napsal(a):
@lukendo https://github.com/…uter-project :) Jednoduchý příklad použití
díky ale nevím si moc rady.. tady v tom muzu rozchodit tu ukazku, tím že přidám ty presentery atd?
- Pavel Janda
- Člen | 977
@lukendo Zkus si pls rozjet vhosta.. Nejsem si jist, jestli jsem přidal podporu takto zadané cesty.
- lukendo
- Člen | 96
Pavel Janda napsal(a):
@lukendo Zkus si pls rozjet vhosta.. Nejsem si jist, jestli jsem přidal podporu takto zadané cesty.
a muzu poprosit nějaký hint jak na to? :)
zkusil jsem do .hosts
<VirtualHost localhost:80>
ServerAdmin localhost
DocumentRoot "C:\xampp\htdocs"
ServerName localhost
</VirtualHost>
ale pořád nic
Editoval lukendo (2. 10. 2017 19:37)
- Pavel Janda
- Člen | 977
Něco takového?
<VirtualHost *:80>
DocumentRoot "C:\xampp\htdocs"
ServerName foo.bar
<Directory "C:\xampp\htdocs">
Options Indexes FollowSymLinks # Includes ExecCGI
AllowOverride All
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
- Mysteria
- Člen | 797
Pro přístup k routě
/api-router/api/users/<id>[/<limit>-<offset>],
musíš v prohlížeči zadat URL ve tvaru
http://neco.neco/api-router/api/users/<id>
.
Já mám třeba
@ApiRoute("/user[/<id>]", parameters={"id"={"requirement":"\d+"}})
a pak je to dostupné na http://project.local/user/<id>
.
- lukendo
- Člen | 96
Mysteria napsal(a):
Pro přístup k routě
/api-router/api/users/<id>[/<limit>-<offset>],
musíš v prohlížeči zadat URL ve tvaruhttp://neco.neco/api-router/api/users/<id>
.Já mám třeba
@ApiRoute("/user[/<id>]", parameters={"id"={"requirement":"\d+"}})
a pak je to dostupné nahttp://project.local/user/<id>
.
http://localhost/uplaboo/www/api-router/api/users/54
→
zadávám tohle, to by mělo být v pořádku ne?
- lukendo
- Člen | 96
tak v hosts mám:
<VirtualHost *:80>
DocumentRoot "C:\xampp\htdocs"
ServerName api.local
<Directory "C:\xampp\htdocs">
Options Indexes FollowSymLinks # Includes ExecCGI
AllowOverride All
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
url pak zadávám http://api.local/api-router/api/users/85
routa :
/**
* @ApiRoute(
* "/api-router/api/users/<id>[/<limit>-<offset>]",
* method="GET",
* )
*/
soubor UsersPres je v app/ResourcesModule/presenters/
routa:
$router[] = new ApiRoute('/api-router/api/users[/<id>]', 'Resources:Users', [
'parameters' => [
'id' => ['requirement' => '\d+', 'default' => 10]
],
'priority' => 1
]);
jestli je chyba v umistení UsersPres. tak se z toho asi zblázním :D
- lukendo
- Člen | 96
Pavel Janda napsal(a):
@lukendo Ukaž ještě presenter. Mohl bys ten projekt nahrát na github?
https://github.com/…icha/uplaboo
mělo by to být „funkční“
Předem děkuji za pomoc se zprovozněním :)