Projekt

Obecné

Profil

Rest API » Historie » Verze 27

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 27 Vojtěch Váchal
24 26 Vojtěch Váchal
----
25
26 25 Vojtěch Váchal
h3. Schůzka s M. Horkým dne 11. dubna 2022
27
28
h4. Binární soubory
29
30
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.
31
32
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).
33
34
h4. Lokalizace
35
36
Na schůzce se řešilo, jakým způsobem se budou posílat do mobilní aplikace lokalizace textů a parametrů úlohy.
37
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. 
38
39
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).
40
41
+ 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.
42
43
----
44
45 23 Vojtěch Váchal
h3. Architektura
46
47
V DMS byl přidán soubor s architekturou -> {{dmsf(727)}}
48
49
Jedná se o návrh architektury. Spíš o jednotlivé částí aplikace, kde se vývoj požadavku bude odehrávat. 
50
Co se týká změn, ty budou pouze aditivní. Nebudou se zde odehrávat žádné změny stávající funkcionality.
51
52
----
53
54 20 Vojtěch Váchal
h3. Vstupní JSON 
55
56
Pro implementaci bude využita nejspíše funkce Neurop3/Services/TestSerivce/saveResult:347
57 22 Vojtěch Váchal
Vzhled dtoIn -> {{dmsf(725)}}
58 21 Vojtěch Váchal
59
----
60 20 Vojtěch Váchal
61 24 Jan Bartošek
App version - .NET Framework 3.6.1.
62
63
----
64
65 20 Vojtěch Váchal
h3. Schůzka s M. Horkým dne 22. března 2022
66
67 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
68
69
h4. Návrh JSONu
70
71 22 Vojtěch Váchal
Co se týká JSON objektu, byla schválena následují podoba viz. příloha -> {{dmsf(724)}}
72 13 Vojtěch Váchal
73 22 Vojtěch Váchal
Pro vytvoření metod lze použít následující konfiguraci pro PostMan -> {{dmsf(723)}}
74 13 Vojtěch Váchal
75
h4. Ověřování uživatele
76
77
* v aktuální implementaci se využívá nějaká .NET knihovna, která hashování řeší sama 
78
* nakonec bylo domluveno, že mobilní aplikace bude posílat *jméno a heslo v _plaintext_ formě*
79
** přes SSL
80
* v budoucnu lze přistoupit k asymetrickému šifrování či změnit implementaci ověřování (_"udělat si vlastní"_)
81
82
----
83
84 9 Vojtěch Váchal
h3. Schůzka s M. Horkým dne 14. března 2022 
85 7 Vojtěch Váchal
86
* 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
87
88
h4. Odesílání souborů
89
90
* odesílat se budou komprimované soubory pomocí kompresního programu *Gzip*
91
* 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
92
* dle zákazníka se zatím jedná pouze o prvotní verzi a není prý úplně důvod tolik řešit optimalizaci
93
** _"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"_
94
95
h4. Autorizace
96
97
* co se týká autorizace, řešení je zcela na nás
98
* nejspíše nebude potřeba speciální endpoint pro ověřování
99
* potřeba zaheshovat login a heslo
100
** _"ověření pacienta (hashovaný login/heslo) - potřebuji pak informaci o typu hashovací funkce"_
101
102
h4. Endpointy a data
103
104
* celkový počet endpointů zatím vypadá na 2
105 8 Vojtěch Váchal
** asi nebudeme vytvářet Swagger API, nemá moc smysl pro 2 endpointy
106 7 Vojtěch Váchal
* formát komunikace *JSON*
107
* návrh API proběhne v iterace od 15.3. - 29.3.2022
108
109
h4. Základní scénář
110
111
# Připojení pacienta k internetu.
112
# Po zapnutí aplikace request s datumem posledního stažení změn.
113
# Zpět informace o nových změnách (nově přidělené balíky, změny v přidělených úlohách). 
114
** U každé úlohy potřebuji ID šablony. 
115
** Ke každé úloze by také měla být kompletní konfigurace včetně všech multimediálních souborů.
116
** Datum změny by mohlo být umístěno někde v databázi - prověřit.
117
# Kdykoli se pak může odeslat JSON s nasbíranými daty. 
118
** 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).
119
120
----
121
122 1 Vojtěch Váchal
h3. Odesílání souborů přes Rest API
123
124
* po analýze bylo zjištěno a nalezena 2 řešení, která by byla možná implementovat
125
* 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
126
127 7 Vojtěch Váchal
h4. -1. Řetězec v Base64-
128 1 Vojtěch Váchal
129 7 Vojtěch Váchal
* -Base64 je kódování, které převádí binární data na posloupnosti tisknutelných znaků.- 
130
* -umožňuje přenos binárních dat kanály, které dovolují pouze přenos textů.- 
131
* -Výhody:-
132
** -funguje na jakákoliv binární data (obrázky, soubory, ...)-
133
** -velice jednoduchá implementace v C#-
134
* -Nevýhody-
135
** -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ší--
136 1 Vojtěch Váchal
137
h4. 2. Komprimované Base64
138
139 7 Vojtěch Váchal
* *nevýhodu prvního řešení lze odstranit nějakou kompresí (Gzip, DeflateStream, ...)*
140
* *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ší*
141
** *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)*
142
* *řešení by fungovalo tak, že by se*
143
** *zapnula aplikace a zahájilo se tak stahování/odesílání potřebného obsahu*
144
** *mobilní aplikace by přijala komprimovaný obrázek v base 64 formátu*
145 1 Vojtěch Váchal
146 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*
147
** *url by obsahovala adresu, kde by se nacházel soubor v plné kvalitě*
148
** *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*
149 2 Vojtěch Váchal
150 7 Vojtěch Váchal
h4. -3. Použít multipart/from-data namísto JSONu-
151 4 Daniel Wébr
152 7 Vojtěch Váchal
* -POST a PUT metody jsou RESTFull, jak jen to jde-
153
** -obsahují textový vstup společně se soubory-
154
* -nevýhodou je, že přenos už nebude realizovaný pomocí JSONu, který je daleko jednodušší k testování, ladění, ...-
155 4 Daniel Wébr
156
h3. Autorizace přeš API
157
158 7 Vojtěch Váchal
* -vhodné přes autorizační token získaný při přihlášení s omezenou platností-
159
** -potřeba ujasnit u zákazníka (na předchozí schůzce zmiňoval, že ještě upřesní své požadavky)-
160 1 Vojtěch Váchal
161 7 Vojtěch Váchal
* tento bod byl dne 14.3. vyjasněn se společníkem zákazníka (M. Horký)
162 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]])
163 7 Vojtěch Váchal
164 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)
165 11 Daniel Wébr
** nutná konzultace se zákazníkem o vyhovujcí variantě authorizace
166
** původní varianta ukládání zaheshovaného hesla by byla složita z důvodu solení hashe
167
168 1 Vojtěch Váchal
h3. Navrhované endpointy
169
170
* podoba endpointů bude vytvořena po zhodnocení nároků a vlastností mobilní aplikace pro kterou API vzniká
171 7 Vojtěch Váchal
172 8 Vojtěch Váchal
* tento bod byl dne 14.3. konzultován se společníkem zákazníka (M. Horký)
173 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]])