INFO: This repository is archived and not used anymore!
Eine simple WebAPI zum Verwalten von Kontakten.
Dieses Repository enthält eine Anwendung die Teil der Vorlesung Web Anwendungen 2 an der Hochschule Albstadt-Sigmaringen ist.
Daher sind einige Ecken und Kannten zum Teil ganz bewusst enthalten. :)
Einige Ideen für mögliche Erweiterungen im Rahmen der Live-Vorlesung oder für den interessierten Studenten zu Hause:
clear
Methode fürAddressbook
findByName
Methode fürAddressbook
- Codecoverage für
/version
endpoint
In diesem Ordner finden sich zwei Klasen: Contanct
und Addressbook
. Diese beiden bilden den eigentlich Inhalt der Anwendung später ab, die sog. "business logic".
Bei der Contact
Klasse handelt es sich um eine einfache Klasse die einen Kontakt in einem Adressbuch beschreibt, also z.B. Vornamen
, Nachname
, Telefonnummer
, etc.
Bei der Addressbook
Klasse handelt es sich um eine sehr einfache Implementierung eines Adressbuches. Dieses kann mehrere Contact
-Klassen entsprechend verwalten.
In diesem Ordner befindet sich eine einfache Express App die eine API zum Zugriff auf das Adressbuch via HTTP ermöglicht.
Diese API hat im wesentlichen drei Endpoitns:
-
GET /api/v1/contacts
: Listet alle aktuellen Kontakte im Adressbuch auf -
POST /api/v1/contacts
: Erzeugt einen neuen Kontakt im Adressbuch. Der neueContact
muss als JSON via HTTP Post Body übertragen werden:{ "firstname": "John", "lastname": "Doe", "birtdate": "1990-01-01" }
-
DELETE /api/v1/contacts
: Löscht einen Kontakt aus dem Adressbuch anhan der Angabe vonfirstname
undlastname
als JSON Post Body:{ "firstname": "John", "lastname": "Doe" }
-
GET /version
: Liefert die aktuelle Release-Version zurück. Nur sinnvoll im Docker-Setup.
Im Ordner test/
befinden sich alle Unit- und IntegrationTests die in diesem Projekt enthalten sind.
Die Tests sind mit dem Test-Framework mocha geschrieben. Die HTTP basierten Integrationstests benutzen zusätzlich noch chai sowie das Modul chai-http.
Alle Tests können bequem mit dem Befehl npm test
ausgeführt werden.
In diesem Ordner sind alle Workflows definiert, mit denen bei GitHub eine sogenannte Continious Integration Pipeline definiert wird.
Die Datei main.yml
definiert die Kommandos die ausgeführt werden, bei jedem normalen push auf den main
branch sowie beim anlegen eines PullRequests. Dadurch wird der aktuelle Code im Repository immer automatisch überprüft.
Die Datei docker-image.yml
enhtält die Kommandos zum erzeugen und veröffentlichen eines fertigen Docker Images das die gesamte Anwendung kapselt.
Bevor die Anwendung funktionieren kann, musst die SQLite3 Datenbank erzeugt werden.
Die geht am einfachsten per Kommandozeile:
$ cat schema.sql | sqlite3 src/api/contacts.db
Wichtig ist, dass die Datenbankam Ende unter $Repository/src/api/contacts.db
liegt.
Wie bei jeder Node.js Anwendung müssen zunächst die notwendigen Module mithilfe von npm install
installiert werden.
Danach kann die Anwendung wie gewohnt mittels npm start
ausgeführt werden. Nach erfolgreichem Start lauscht die ContactsAPI auf http://localhost:3000/
.
Da die GitHub Actions auch ein Image der Anwendung veröffentlichen, kann auch dieses Image direkt lokal mit hilfe von Docker gestartet werden:
$ docker run -it --rm -p 3000:3000 ghandmann/contacts-api
Danach läuft die Anwendung als Docker Container auf Ihrem System. Auf die ContactsAPI wird dann über http://localhost:3000
zugegriffen.
Mithilfe von docker pull ghandmann/contacts-api
kann ein aktualisiertes Images heruntergeladen werden.
Folgende extensions werden für die Entwicklung in VSCode empfohlen:
- Install mocha test explorer
- Install eslint
Das Testframework mocha
hat auch einen speziellen watch mode. Damit beobachtet das mocha Framework alle Änderungen am Repository im Hintergrund und führt bei jeder Änderung automatisch die Tests im test/
Ordner aus.
Damit lässt sich ein schneller feedback loop zwischen Änderung und Testergebnis erreichen.
- Start mocha watch mode:
mocha -w
- Create code coverage report:
npm run cover