Projekt

Obecné

Profil

Rest API » Historie » Verze 24

Jan Bartošek, 2022-04-11 11:30

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