From 95d5025c0ae593e4ab6935d564f48bb1ea581561 Mon Sep 17 00:00:00 2001 From: Marcel Schwarz Date: Thu, 11 Jun 2020 13:41:09 +0200 Subject: [PATCH] Add samples to the projections subsection --- documentation/parts/backend.tex | 50 ++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/documentation/parts/backend.tex b/documentation/parts/backend.tex index 31380c2..1f796f3 100644 --- a/documentation/parts/backend.tex +++ b/documentation/parts/backend.tex @@ -121,6 +121,54 @@ \lstinputlisting[language=Java,firstline=9,caption=RecordOverviewProjection,label=code:record-repository]{../backend/src/main/java/de/hft/geotime/entities/projections/RecordOverviewProjection.java} Die "RecordOverviewProjection" reichert eine normale "Record" Ressource noch zusätzlich mit dem Username und den Accountnamen an. Dadurch muss nicht für jeden Record erneut einzeln der Accountname nachgeschlagen werden. Zudem wird noch ein, bei jeder Anfrage neu berechnetes, zusätzliches Feld angefügt. Die Dauer des Records in Minuten. + + Eine Projektion kann am Beispiel des Records gut verdeutlicht werden. + + \begin{lstlisting}[language=json,caption=Einzelner Record ohne Projektion,label=code:records-without-proj] +{ + "startdate": "2020-05-30T18:00:00", + "enddate": "2020-05-30T19:00:00", + "type": "PAID", + "duration": 60, + "_links": { + "self": { + "href": "http://localhost:5000/records/27" + }, + "records": { + "href": "http://localhost:5000/records/27{?projection}", + "templated": true + }, + "account": { + "href": "http://localhost:5000/records/27/account{?projection}", + "templated": true + } + } +} + \end{lstlisting} + \begin{lstlisting}[language=json,caption=Einzelner Record mit Projektion "overview",label=code:records-with-proj] +{ + "duration": 60, + "username": "scma", + "account": "TestAccount", + "startdate": "2020-05-30T18:00:00", + "enddate": "2020-05-30T19:00:00", + "type": "PAID", + "_links": { + "self": { + "href": "http://localhost:5000/records/27" + }, + "records": { + "href": "http://localhost:5000/records/27{?projection}", + "templated": true + }, + "account": { + "href": "http://localhost:5000/records/27/account{?projection}", + "templated": true + } + } +} + \end{lstlisting} + Es zu sehen, dass in Listing \ref{code:records-without-proj} die beiden Felder "account" und "username" fehlen, diese tauchen erst bei der Abfrage mit angewendeter, serverseitiger, Projektion auf (siehe Listing \ref{code:records-with-proj}). Die Anfrage für Listing \ref{code:records-without-proj} lautet \verb|http://localhost/records/27| und um nun die Projektion anzuhängen, wird die URL wie folgt erweitert: \verb|http://localhost/records/27?projection=overview|. Projektionen können hierbei nicht nur auf einzelne Objekte einer Ressource angewendet werden, sondern auch auf eine Menge dieser. \section{Endpoints} Die vier Hauptendpoints sind sicherlich die unserer Hautptressourcen: locations, accounts, records und users. Unten gibt es noch den nicht implementierten Endpoint für die Rollen ("roles") dieser liefert aber kaum Informationen. Der "profile" Endpoint wird erst im nächsten Kapitel erläutert. Um diesen Output zu bekommen muss der Nutzer authentifiziert sein. Dies geschieht wie oben schon erwähnt über den "/login" Endpoint. Da dieser aber keine Ausgaben außer dem Header mit dem Token liefert, wird er hier nicht weiter erläutert. Selbiges gilt auch für den "/sign-up" Endpoint. Alle Anfragen die ab jetzt ausgeführt werden geschehen immer mit vorheriger Authentifizierung. \begin{lstlisting}[language=json,caption=Zugriff auf die Route "/" der API,label=code:main-route-api] @@ -189,7 +237,7 @@ } \end{lstlisting} - Aufgrund der massiven Größe der Ausgaben der API werden die weiteren Ressourcen nur noch mit ihrem Link angegeben. Alle Ressourcen unterstützen zudem die CRUD Operationen auf einzelnen Ressourcen als auch auf der Hauptressource, deshalb werden sie aus Platzgründen ebenfalls übergangen. + Aufgrund der massiven Größe der Ausgaben der API werden die weiteren Endpoints nur noch mit ihrem Link angegeben. Alle Ressourcen unterstützen zudem die CRUD Operationen auf einzelnen Ressourcen als auch auf der Hauptressource, deshalb werden sie aus Platzgründen ebenfalls übergangen. \subsection*{Endpoints für Ressourcen} \begin{itemize}