Projekt

Obecné

Profil

Rest API » Historie » Verze 26

Vojtěch Váchal, 2022-04-23 16:55

1 1 Vojtěch Váchal
h1. Rest API
2
3
* offline mobilní aplikace
4
* při připojení k internetu bude posílat dosažené výsledky a stahovat nové úlohy a balíky přidělené terapeutem
5
* potřeba navrhnout a implementovat Rest API, se kterým bude moct aplikace komunikovat
6
7
----
8
9 26 Vojtěch Váchal
h3. Další problémy s binárními soubory
10
11
Po přípravě prototypu a začátku testování bylo zjištěno, že výstupní funkce generuje moc velké objekty pro jednu úlohu (cca 400 obrázků -> 80MB, s kompresí 70MB).
12
Po krátké diskuzi se zadavatelem bylo zjištěno, že tento výsledek je nechtěný, prostě to je moc dat, které by se posílaly, kdy by se jednalo o více úloh najednout.
13
14
15
h4. Nové řešení odesílání binárních souborů
16
17
Na základě konverzace je potřeba upravit odesílání binárních souborů následovně.
18
Bude potřeba, posílat nějaké informace ke každému obrázku. Porovnání bude probíhat v mobilní aplikaci a případné originální obrázky se stáhnu přes endpoint. Místo cesty k obrázku bude objekt, který bude obsahovat následující informace (lze to vyřešit i přes index do pole s informacemi o obrázcích - to už je jedno): cestu k souboru, paměťovou velikost, šířku, výšku a ideálně průměrné hodnoty RGB kanálů a jasu (zaokrouhlené na celá čísla - je jedno jestli dolů nebo nahoru, vyhnul bych se ale klasickému zaokrouhlování). Hodnoty RGB + jas pro každý pixel lze najít v instancích třídy Color. Ty atributy ve webové aplikaci budou nejspíše pojmenovány R, G, B, A a grayscale lze získat přes funkci GetBrightness().
19
20
U zvuku bychom mohli řešit dobu trvání, přenosovou rychlost, velikost a případně další.
21
22
K těm dalším typům binárních souborů - musíme počítat třeba s GIFy. Mohli bychom to prozatím pořešit tak, že když to nebude obrázek a zvuk, tak budeme porovnávat pouze název a paměťovou velikost.
23
----
24
25 25 Vojtěch Váchal
h3. Schůzka s M. Horkým dne 11. dubna 2022
26
27
h4. Binární soubory
28
29
V úlohách se vyskytují binární soubory. Problém nastává u endpointu, který přijímá výsledky z mobilní aplikace. Na vstupu má totiž řetězec, ve kterém by se vyskytoval "někde" base64 řetězec, který reprezentuje obrázek.
30
31
Na schůzce bylo domluveno, že se použije již vytvořený endpoint pro ukládání souborů (nutno najít). Mobilní aplikace nejdříve uloží všechny obrázky pomocí této funkce a následně cesty k souborům pošle standardně ve stringu (jak tomu již je ve webových verzích hrách).
32
33
h4. Lokalizace
34
35
Na schůzce se řešilo, jakým způsobem se budou posílat do mobilní aplikace lokalizace textů a parametrů úlohy.
36
Návrhem a schváleným řešením se nakonec stalo to, že spolu s přihlaš. údaji bude mobilní aplikace posílat i informaci, ve které lokalizaci se budou úlohy odesílat. 
37
38
Zároveň je ještě potřeba udělat analýza na to, zdali je velký rozdíl ve velikost odesílaných dat při odesílání konkrétní nebo všech lokalizací. Hlavně otestovat na logopedických úlohách (na produkci).
39
40
+ bylo by nejlepší vytvořit sdílené prostředí pro nás a M. Horkého, aby viděl aktuální verze návrhů atd.
41
42
----
43
44 23 Vojtěch Váchal
h3. Architektura
45
46
V DMS byl přidán soubor s architekturou -> {{dmsf(727)}}
47
48
Jedná se o návrh architektury. Spíš o jednotlivé částí aplikace, kde se vývoj požadavku bude odehrávat. 
49
Co se týká změn, ty budou pouze aditivní. Nebudou se zde odehrávat žádné změny stávající funkcionality.
50
51
----
52
53 20 Vojtěch Váchal
h3. Vstupní JSON 
54
55
Pro implementaci bude využita nejspíše funkce Neurop3/Services/TestSerivce/saveResult:347
56 22 Vojtěch Váchal
Vzhled dtoIn -> {{dmsf(725)}}
57 21 Vojtěch Váchal
58
----
59 20 Vojtěch Váchal
60 24 Jan Bartošek
App version - .NET Framework 3.6.1.
61
62
----
63
64 20 Vojtěch Váchal
h3. Schůzka s M. Horkým dne 22. března 2022
65
66 13 Vojtěch Váchal
* záznam ze schůzky, kde se řešil návrh JSON objektu, který bude odesílán z webové aplikace a diskuze nad ověřováním uživatele
67
68
h4. Návrh JSONu
69
70 22 Vojtěch Váchal
Co se týká JSON objektu, byla schválena následují podoba viz. příloha -> {{dmsf(724)}}
71 13 Vojtěch Váchal
72 22 Vojtěch Váchal
Pro vytvoření metod lze použít následující konfiguraci pro PostMan -> {{dmsf(723)}}
73 13 Vojtěch Váchal
74
h4. Ověřování uživatele
75
76
* v aktuální implementaci se využívá nějaká .NET knihovna, která hashování řeší sama 
77
* nakonec bylo domluveno, že mobilní aplikace bude posílat *jméno a heslo v _plaintext_ formě*
78
** přes SSL
79
* v budoucnu lze přistoupit k asymetrickému šifrování či změnit implementaci ověřování (_"udělat si vlastní"_)
80
81
----
82
83 9 Vojtěch Váchal
h3. Schůzka s M. Horkým dne 14. března 2022 
84 7 Vojtěch Váchal
85
* záznam ze schůzky, kde se probíral návrh API a dořešení dalších otázek, které vznikly při analýze
86
87
h4. Odesílání souborů
88
89
* odesílat se budou komprimované soubory pomocí kompresního programu *Gzip*
90
* následně se bude soubor převádět do řetězce v *Base64* formátu, který bude přiložen do odesílaného JSONu
91
* dle zákazníka se zatím jedná pouze o prvotní verzi a není prý úplně důvod tolik řešit optimalizaci
92
** _"z počátku (v prvních iteracích) upřednostnit jednodušší a rychlejší řešení, než optimalizaci - tu pak můžeme dotáhnout, když to půjde hladce a zbyde čas"_
93
94
h4. Autorizace
95
96
* co se týká autorizace, řešení je zcela na nás
97
* nejspíše nebude potřeba speciální endpoint pro ověřování
98
* potřeba zaheshovat login a heslo
99
** _"ověření pacienta (hashovaný login/heslo) - potřebuji pak informaci o typu hashovací funkce"_
100
101
h4. Endpointy a data
102
103
* celkový počet endpointů zatím vypadá na 2
104 8 Vojtěch Váchal
** asi nebudeme vytvářet Swagger API, nemá moc smysl pro 2 endpointy
105 7 Vojtěch Váchal
* formát komunikace *JSON*
106
* návrh API proběhne v iterace od 15.3. - 29.3.2022
107
108
h4. Základní scénář
109
110
# Připojení pacienta k internetu.
111
# Po zapnutí aplikace request s datumem posledního stažení změn.
112
# Zpět informace o nových změnách (nově přidělené balíky, změny v přidělených úlohách). 
113
** U každé úlohy potřebuji ID šablony. 
114
** Ke každé úloze by také měla být kompletní konfigurace včetně všech multimediálních souborů.
115
** Datum změny by mohlo být umístěno někde v databázi - prověřit.
116
# Kdykoli se pak může odeslat JSON s nasbíranými daty. 
117
** Tady pozor na možné změny v balících - pokud nedošlo k celkovému odstranění úlohy - myslím opravdu celkovému ne pouze z balíku - tak by se data měla uložit vždy).
118
119
----
120
121 1 Vojtěch Váchal
h3. Odesílání souborů přes Rest API
122
123
* po analýze bylo zjištěno a nalezena 2 řešení, která by byla možná implementovat
124
* potřeba probrat s M. Horkým na nějaké schůzce, které řešení se zvolí, zda by bylo potřeba řešit úplně jinak
125
126 7 Vojtěch Váchal
h4. -1. Řetězec v Base64-
127 1 Vojtěch Váchal
128 7 Vojtěch Váchal
* -Base64 je kódování, které převádí binární data na posloupnosti tisknutelných znaků.- 
129
* -umožňuje přenos binárních dat kanály, které dovolují pouze přenos textů.- 
130
* -Výhody:-
131
** -funguje na jakákoliv binární data (obrázky, soubory, ...)-
132
** -velice jednoduchá implementace v C#-
133
* -Nevýhody-
134
** -největší nevýhodou tohoto řešení je, že velikost vytvořeného/odesílaného řetězce je zhruba o 20-30% větší--
135 1 Vojtěch Váchal
136
h4. 2. Komprimované Base64
137
138 7 Vojtěch Váchal
* *nevýhodu prvního řešení lze odstranit nějakou kompresí (Gzip, DeflateStream, ...)*
139
* *podle zvolené komprese by se sice ztrácela kvalita obrázků, ale přenos dat by se mohl zrychlit, protože velikost dat by měla být menší*
140
** *nechceme aby stahování/odesílání trvalo příliš dlouho (pacient může trénovat pouze po dobu jedné hry, či pouze zkoumat dosažené výsledky)*
141
* *řešení by fungovalo tak, že by se*
142
** *zapnula aplikace a zahájilo se tak stahování/odesílání potřebného obsahu*
143
** *mobilní aplikace by přijala komprimovaný obrázek v base 64 formátu*
144 1 Vojtěch Váchal
145 7 Vojtěch Váchal
* *pokud by byla potřeba stejná kvalita obrázků, jak v aplikace tak v systému byla by možnost spolu s komprimovaným obrázkem posílat i url*
146
** *url by obsahovala adresu, kde by se nacházel soubor v plné kvalitě*
147
** *po stažení všech potřebných/nových dat ze systému by se na pozadí aplikace zahájilo stahování obrázků v plné kvalitě a nenarušovalo uživatele*
148 2 Vojtěch Váchal
149 7 Vojtěch Váchal
h4. -3. Použít multipart/from-data namísto JSONu-
150 4 Daniel Wébr
151 7 Vojtěch Váchal
* -POST a PUT metody jsou RESTFull, jak jen to jde-
152
** -obsahují textový vstup společně se soubory-
153
* -nevýhodou je, že přenos už nebude realizovaný pomocí JSONu, který je daleko jednodušší k testování, ladění, ...-
154 4 Daniel Wébr
155
h3. Autorizace přeš API
156
157 7 Vojtěch Váchal
* -vhodné přes autorizační token získaný při přihlášení s omezenou platností-
158
** -potřeba ujasnit u zákazníka (na předchozí schůzce zmiňoval, že ještě upřesní své požadavky)-
159 1 Vojtěch Váchal
160 7 Vojtěch Váchal
* tento bod byl dne 14.3. vyjasněn se společníkem zákazníka (M. Horký)
161 10 Vojtěch Váchal
** konkrétní informace lze dohledat v tomto dokumentu výše (viz. [[#Schůzka s M. Horkým dne 14. března 2022]])
162 7 Vojtěch Váchal
163 12 Daniel Wébr
* provedena analýza provedené hashovací funkce (viz https://stackoverflow.com/questions/20621950/asp-net-identitys-default-password-hasher-how-does-it-work-and-is-it-secure)
164 11 Daniel Wébr
** nutná konzultace se zákazníkem o vyhovujcí variantě authorizace
165
** původní varianta ukládání zaheshovaného hesla by byla složita z důvodu solení hashe
166
167 1 Vojtěch Váchal
h3. Navrhované endpointy
168
169
* podoba endpointů bude vytvořena po zhodnocení nároků a vlastností mobilní aplikace pro kterou API vzniká
170 7 Vojtěch Váchal
171 8 Vojtěch Váchal
* tento bod byl dne 14.3. konzultován se společníkem zákazníka (M. Horký)
172 9 Vojtěch Váchal
** konkrétní informace lze dohledat v tomto dokumentu výše (viz. [[#Schůzka s M. Horkým dne 14. března 2022]])