Architektūra
Sistemos apžvalga
iOS app / agent client -> api.<domain> -> API Gateway -> Lambda backend -> Postgres
Web app -> app.<domain> -> CloudFront -> SPA
Browser and agent auth -> auth.<domain> -> API Gateway -> Auth Lambda -> Cognito
Apex fallback -> <domain> -> CloudFront redirect -> app.<domain>
Principai
app,apiirauthnaudoja atskirus viešus domenus- Pagrindinis duomenų šaltinis yra Postgres
- iOS klientas pirmiausia veikia neprisijungus: vietinė SQLite duomenų bazė ir sinchronizavimas
- Žiniatinklio programėlė, iOS programėlė ir išorinių agentų sąsaja naudoja tą patį darbo sričių modelį
- Išoriniai agentai pradeda nuo
GET https://api.nibomo.com/v1/
Palaikomi klientai
- Žiniatinklio programėlė adresu
app.nibomo.com - iOS programėlė pagrindinėje saugykloje su vietine SQLite saugykla
- Android programėlė Google Play parduotuvėje
- Išoriniai agentų klientai per aptikimą, pradinį prisijungimą vienkartiniu kodu ir
Authorization: ApiKey
Duomenų modelis
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
Duomenų srautas
Žiniatinklis
- Naršyklė prisijungia per
auth.<domain>. - Žiniatinklio programėlė įkelia darbo srities duomenis iš
api.<domain>. - DI pokalbio užklausos keliauja per
/chat/local-turn. - Pateikus kartojimą, planuoklio būsena atnaujinama įrašymo metu.
iOS
- iOS programėlė pirmiausia įrašo duomenis į vietinę SQLite.
- Vietiniai pakeitimai įtraukiami į išsiuntimo eilę.
- Sinchronizavimas išsiunčia pakeitimus per
/v1/workspaces/{workspaceId}/sync/push. - Sinchronizavimas atsisiunčia nuotolinius atnaujinimus per
/v1/workspaces/{workspaceId}/sync/pull. - Vietinė duomenų bazė pritaiko pakeitimus ir paslenka sinchronizavimo žymeklį.
Išoriniai agentai
- Agentai pradeda nuo
GET /v1/. - Pradinis prisijungimas vienkartiniu kodu vyksta domene
auth.<domain>. - Agentas gauna ilgalaikį API raktą.
- Agentas įkelia
/v1/agent/me, gauna darbo sričių sąrašą, prireikus pasirenka vieną ir tada naudoja/v1/agent/sql/querybei/v1/agent/sql/execute.
Planavimas
Nibomo kartojimams planuoti naudoja FSRS.
Įgyvendinimo pastabos:
- serverinė dalis ir iOS turi tarpusavyje suderintas FSRS realizacijas
- žiniatinklio programėlė atkartoja planavimo duomenų sutartį, tačiau trečios planuoklio kopijos neturi
- darbo srities lygio planuoklio nustatymai apima norimą įsiminimo lygį, mokymosi žingsnius, pakartotinio mokymosi žingsnius, didžiausią intervalą ir atsitiktinį intervalų išsklaidymą (fuzz)
- tikrasis kartojimo laikas imamas iš
reviewedAtClient
Išsamią sutartį rasite FSRS planavimo logikos aprašyme pagrindinėje saugykloje.
Autentifikavimas
- El. pašto vienkartinis kodas per Cognito
- Bendro domeno naršyklės sesijos slapukai talpinamai žiniatinklio programėlei
- Agento pradinis prisijungimas vienkartiniu kodu domene
auth.<domain>, kurio rezultatas – ilgalaikis ApiKey AUTH_MODE=nonevietinei kūrimo aplinkaiAUTH_MODE=cognitoprodukcinę aplinką atitinkančiam autentifikavimui
Diegimo struktūra
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + Lambda serverinė dalisauth.<domain>-> API Gateway + Lambda autentifikavimo paslauga- Postgres AWS RDS paslaugoje
Šakninis domenas gali likti atskirai rinkodaros svetainei. Jei pradinės sąrankos metu jis laisvas, infrastruktūra gali laikinai jį peradresuoti į app.<domain>.