emil-backend v1.0.0
EMIL
Architektur
Diese Grafik kann mit draw.io bearbeitet und wieder als SVG gespeichert werden.
Tech
EMIL-Backend
- Node.js
- Typescript
- Koa
- awilix
- SQLite (wenn nötig)
- Deployen als Docker-image
EMIl-Hub
- Node.js
- Typescript
- Koa oder express
- awilix oder inversify
- Deployen in Swisscom-Cloud
EMIL-App
- React Native
- React Native Elements
- Apollo Client (GraphQl)
- Typescript
Konfigurationsdaten
EMIL-Hub
EMIL-Backend
Architekturentscheide
EMIL-Backend & Hub
Als Optionen gab es für uns know-how mässig folgende 2 Optionen: Node.js Stack & Spring Boot Stack.
Aus folgenden Gründen haben wir uns für den Node.js Stack entschieden:
- gleiche Sprache & libraries wie frontend
- Installer Erfahrungen aus anderen Projekten
- geringerer Ressourcenverbrauch / kleinere Laufzeitumgebung
- selber Stack für Hub & Backend
Web-Framework
Als Web-Framework haben wir uns für Koa entschieden. Koa wurden vom Express-Entwicklungsteam entwickelt. Das Framework ist modularer aufgebaut als Express und unterstützt beispielsweise async-await. Für ein Projekt auf grüner Wiese anerbietet sich der Einsatz von Koa.
https://raygun.com/blog/koa-vs-express/
https://medium.com/@theomalaper.cognez/express-vs-koa-and-hapi-a2c65f949b78
DI-Framework
Für ein DI-Framework gibt es mehrere Optionen. Am populärsten ist wohl Inversify. An zweiter Stelle kommt Awilix, welches sich an steigender Beliebtheit erfreut. Bei Inversify ist meistens relativ viel Boilerplate-Code notwendig. Daher setzen wir in diesem Fall auf Awilix.
https://www.npmtrends.com/awilix-vs-bottlejs-vs-inversify-vs-node-dependency-injection
EMIL-App
Development
Um sich mit dem Apollo-Server zu verbinden folgende Datei anpassen und unbennenen dev-constants-sample.ts --> dev-constants.ts
Kommunikation zwischen EMIL-App und EMIL-Backend
Aus folgenden Gründen haben wir uns für GraphQL entschieden:
- Simple Doku mit Apollo-Server. So ist es sehr einfach zu sehen, welche Mutationen und Queries existieren.
- Automatische Typ-Validierung ohne zusätzliche Frameworks.
- Gute Etablierung von TypeGraphQL (https://typegraphql.com/)
- Synergien: Aktuell verwenden wir in einem anderen Projekt ebenfalls TypeGraphQL
Entwicklung
Config-Files
- Das Passwort von "EMIL Firebase Service Account" aus dem Passwortmanager in die Datei "firebase-key.json" speichern.
Image Builden & Deployen
- Falls noch nicht gemacht:
docker login registry.gitlab.com
npm run deploy
4 years ago