Timesheets-Server
Timesheets server
|
Virtuální třída pro vyřizování unifikovaných Http požadavků na server API. ...
#include <abstractcontroller.h>
Veřejné metody | |
AbstractController (HobrasoftHttpd::HttpConnection *parent) | |
Konstruktor. | |
virtual void | service (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response) |
Obsluha požadavku. | |
void | setCheckId (bool x) |
Nastavuje kontrolu položky ID v datech při PUT a POST. | |
void | setAuthorizer (RequestAuthorizer *authorizer) |
AuthenticatedUser * | authenticatedUser () const |
bool | checkId () const |
Vrací stav kontroly položky ID v datech při PUT a POST. | |
Db::Database * | db () |
Chráněné metody | |
virtual bool | exists (const QString &id) |
Kontrola existence zadaného ID. | |
virtual bool | exists (HobrasoftHttpd::HttpRequest *request, const QString &id) |
Kontrola existence zadaného ID. | |
virtual void | serviceOK (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariant &data=QVariant()) |
Pošle odpověď 200 OK. | |
virtual void | serviceError (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int code, const QString &error, const QVariantMap &data) |
Pošle chybovou odpověď | |
virtual void | serviceList (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response) |
Měl by poslat v odpovědi kompletní seznam všech objektů ve třídě a ukončit se. | |
virtual void | serviceEvents (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response) |
Pošle v odpovědi kompletní seznam všech objektů ve třídě a následně | |
virtual void | serviceIdEvents (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString &id) |
Pošle v odpovědi proud událostí spojených se všemi objekty ve třídě | |
virtual void | serviceIdGet (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString &id) |
Pošle odpověď na požadavek konkrétního ID metodou GET. | |
virtual void | serviceIdDelete (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString &id) |
Pošle odpověď na požadavek konkrétního ID metodou DELETE - obvykle objekt smaže. | |
virtual void | serviceIdPut (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap &data) |
Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existující objekt. | |
virtual void | serviceIdPost (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap &data) |
Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existující objekt. | |
virtual void | serviceEvent (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariant &data) |
Pošle do otevřeného proudu událostí jednu událost. | |
virtual bool | isAuthorized (Security::Permissions::Permission) |
HobrasoftHttpd::HttpRequest * | request () const |
Vrací ukazatel na aktuální request. | |
HobrasoftHttpd::HttpConnection * | connection () const |
Vrací ukazatel na aktuální connection. | |
Statické chráněné metody | |
static QVariantMap | putKey (const QVariant &key) |
Virtuální třída pro vyřizování unifikovaných Http požadavků na server API.
Třída vytváří šablonu pro tvorbu unifikovaných HTTP požadavků podle specifikace api. Požadavky jsou tvořené s pevnou strukturou, například:
Cesta je složená z několika komponent:
Pro obsluhu cest se volají různé metody:
Defaultní implementace vrací chybu 501. V odvozené třídě se musí implementovat všechny metody, které mají vracet užitečná data. Může být důležité implementovat i metodu exists() - tato metoda vrací bool hodnotu true, pokud dotazované ID existuje. Pokud metoda exists() vrátí false, defaultní implementace třídy vrátí jako odpověď na http požadavek chybu 404. Implementace konkrétní metody se tak nemusí starat o odesílání chybových stavů, například:
Kontrola na existenci ID proběhla už v abstraktní třídě AbstractController, takže je v kódu zbytečná - k podobnému stavu by nemělo nikdy dojít. Kontrola je zde pouze pro jistoru, aby server nespadnul při nepředvídatelných událostech. Dobrodružné povahy mohou s velkou porcí jistoty zkrátit celou implementaci metody takto:
Implementace proudu událostí se dá zjednodušit použitím metody serviceEvent(). Tato metoda posílá v odpovědi předaná data zformátovaná jako událost - postará se o správné zformátování a potlačí odeslání hlaviček. Implementace proudu událostí pak může vypadat takto (pro stručnost jsou vyházené kontroly):
Definice je uvedena na řádku 132 v souboru abstractcontroller.h.
AbstractController::AbstractController | ( | HobrasoftHttpd::HttpConnection * | parent | ) |
Konstruktor.
Definice je uvedena na řádku 20 v souboru abstractcontroller.cpp.
|
inline |
Definice je uvedena na řádku 153 v souboru abstractcontroller.h.
|
inline |
Vrací stav kontroly položky ID v datech při PUT a POST.
Definice je uvedena na řádku 158 v souboru abstractcontroller.h.
|
protected |
Vrací ukazatel na aktuální connection.
Definice je uvedena na řádku 39 v souboru abstractcontroller.cpp.
Db::Database * AbstractController::db | ( | ) |
Definice je uvedena na řádku 27 v souboru abstractcontroller.cpp.
|
inlineprotectedvirtual |
Kontrola existence zadaného ID.
V odvozených třídách by měla být metoda reimplementovaná. Na základě výsledků se rozhoduje, jestli se pošle jako odpověď na dotaz chyba 404, nebo se bude volat některá z dalších metod (serviceId(), serviceIdEvents(), serviceIdDelete()).
Definice je uvedena na řádku 174 v souboru abstractcontroller.h.
|
inlineprotectedvirtual |
Kontrola existence zadaného ID.
V odvozených třídách by měla být metoda reimplementovaná. Na základě výsledků se rozhoduje, jestli se pošle jako odpověď na dotaz chyba 404, nebo se bude volat některá z dalších metod (serviceId(), serviceIdEvents(), serviceIdDelete()).
Definice je uvedena na řádku 190 v souboru abstractcontroller.h.
|
protectedvirtual |
Definice je uvedena na řádku 44 v souboru abstractcontroller.cpp.
|
inlinestaticprotected |
Definice je uvedena na řádku 305 v souboru abstractcontroller.h.
|
protected |
Vrací ukazatel na aktuální request.
Definice je uvedena na řádku 34 v souboru abstractcontroller.cpp.
|
virtual |
Obsluha požadavku.
Reimplementováno v Httpd::ControllerOverview, Httpd::ControllerTimesheet a Httpd::ControllerUsers.
Definice je uvedena na řádku 52 v souboru abstractcontroller.cpp.
|
protectedvirtual |
Pošle chybovou odpověď
code | - chybový kód (například 404) |
error | - chybový textový kód |
reason | - vysvětlení chyby |
Posílá odpověď zformátovanou takto:
*/ virtual void serviceError (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int code, const QString& error, const QString& reason);
/**
Pošle chybovou odpověď
code | - chybový kód (například 404) |
error | - chybový textový kód, píše se do HTTP statutu |
reason | - vysvětlení chyby |
Posílá odpověď zformátovanou takto:
Definice je uvedena na řádku 198 v souboru abstractcontroller.cpp.
|
protectedvirtual |
Pošle do otevřeného proudu událostí jednu událost.
I když je možné reimplementovat, obvykle pro to není důvod. Posílá do proudu událostí jednu událost.
Definice je uvedena na řádku 260 v souboru abstractcontroller.cpp.
|
protectedvirtual |
Pošle v odpovědi kompletní seznam všech objektů ve třídě a následně
Defaultní implementace posílá chybu 501 Not Implemented
Definice je uvedena na řádku 292 v souboru abstractcontroller.cpp.
|
protectedvirtual |
Pošle odpověď na požadavek konkrétního ID metodou DELETE - obvykle objekt smaže.
Defaultní implementace posílá chybu 501 Not Implemented
Reimplementováno v Httpd::ControllerCategories, Httpd::ControllerOverview, Httpd::ControllerStatuses, Httpd::ControllerStatusOrder, Httpd::ControllerTicketFiles, Httpd::ControllerTickets, Httpd::ControllerTicketStatus, Httpd::ControllerTicketsVw, Httpd::ControllerTicketTimesheets, Httpd::ControllerTicketValues, Httpd::ControllerUsers a Httpd::ControllerUsersCategories.
Definice je uvedena na řádku 302 v souboru abstractcontroller.cpp.
|
protectedvirtual |
Pošle v odpovědi proud událostí spojených se všemi objekty ve třídě
Obvyklá implementace pošle na začátku seznam všech objektů (jako události) a potom posílá už jen změny
Defaultní implementace posílá chybu 501 Not Implemented
Definice je uvedena na řádku 297 v souboru abstractcontroller.cpp.
|
protectedvirtual |
Pošle odpověď na požadavek konkrétního ID metodou GET.
Defaultní implementace posílá chybu 501 Not Implemented
Reimplementováno v Httpd::ControllerCategories, Httpd::ControllerCategoriesSiblings, Httpd::ControllerCategoriesToRoot, Httpd::ControllerCategoriesTree, Httpd::ControllerOverview, Httpd::ControllerOverviewPublic, Httpd::ControllerServer, Httpd::ControllerStatuses, Httpd::ControllerStatusOrder, Httpd::ControllerStatusTemplates, Httpd::ControllerTicketFiles, Httpd::ControllerTickets, Httpd::ControllerTicketStatus, Httpd::ControllerTicketsVw, Httpd::ControllerTicketTimesheets, Httpd::ControllerTicketValues, Httpd::ControllerUsers a Httpd::ControllerUsersCategories.
Definice je uvedena na řádku 307 v souboru abstractcontroller.cpp.
|
protectedvirtual |
Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existující objekt.
Defaultní implementace posílá chybu 501 Not Implemented
Reimplementováno v Httpd::ControllerCategories, Httpd::ControllerServer, Httpd::ControllerStatuses, Httpd::ControllerStatusOrder, Httpd::ControllerTicketFiles, Httpd::ControllerTickets, Httpd::ControllerTicketStatus, Httpd::ControllerTicketsVw, Httpd::ControllerTicketTimesheets, Httpd::ControllerTicketValues, Httpd::ControllerUsers a Httpd::ControllerUsersCategories.
Definice je uvedena na řádku 317 v souboru abstractcontroller.cpp.
|
protectedvirtual |
Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existující objekt.
Defaultní implementace posílá chybu 501 Not Implemented
Reimplementováno v Httpd::ControllerCategories, Httpd::ControllerServer, Httpd::ControllerStatuses, Httpd::ControllerStatusOrder, Httpd::ControllerTicketFiles, Httpd::ControllerTickets, Httpd::ControllerTicketStatus, Httpd::ControllerTicketsVw, Httpd::ControllerTicketTimesheets, Httpd::ControllerTicketValues, Httpd::ControllerUsers a Httpd::ControllerUsersCategories.
Definice je uvedena na řádku 312 v souboru abstractcontroller.cpp.
|
protectedvirtual |
Měl by poslat v odpovědi kompletní seznam všech objektů ve třídě a ukončit se.
Defaultní implementace posílá chybu 501 Not Implemented
Reimplementováno v Httpd::ControllerCategories, Httpd::ControllerCategoriesSiblings, Httpd::ControllerCategoriesTree, Httpd::ControllerOverview, Httpd::ControllerStatuses, Httpd::ControllerStatusOrder, Httpd::ControllerStatusTemplates, Httpd::ControllerTicketFiles, Httpd::ControllerTickets, Httpd::ControllerTicketStatus, Httpd::ControllerTicketsVw, Httpd::ControllerTicketTimesheets, Httpd::ControllerTicketValues, Httpd::ControllerUsers a Httpd::ControllerUsersCategories.
Definice je uvedena na řádku 287 v souboru abstractcontroller.cpp.
|
protectedvirtual |
Pošle odpověď 200 OK.
data | - pokud je zadaný, pošle se místo defaultního '{ "ok" : true }' |
Definice je uvedena na řádku 242 v souboru abstractcontroller.cpp.
|
inline |
Definice je uvedena na řádku 151 v souboru abstractcontroller.h.
|
inline |
Nastavuje kontrolu položky ID v datech při PUT a POST.
Definice je uvedena na řádku 149 v souboru abstractcontroller.h.