Code Monkey home page Code Monkey logo

news-articles-backend's Introduction

Heise-Bewerbungsaufgaben Teil 1: News-Artikel-Webservice (Backend)

Einrichten der Entwicklungsumgebung

Die Entwicklungsumgebung besteht aus einem LEMP-Stack in Form von Docker-Containern und kann gestartet werden über docker-compose up. Der Stack besteht aus folgenden Diensten:

  • nginx: Der Webserver bezieht seine config beim Buildvorgang aus der docker/nginx/nginx.conf. Diese leitet alle eingehenden Anfragen, welche nicht auf eine explizite php-Datei gehen, auf die index.php und somit den Einstiegspunkt der Applikation weiter
  • php-fpm: Als Interpreter wird ein php-fpm der Version 8.0 verwendet. Beim Buildvorgang werden alle Abhängigkeiten automatisch über composer installiert
  • MariaDB: Als relationale Datenbank wird MariaDB verwendet. Die Datenbank, User und Passwort werden über die Environment-Variablen in der docker-compose.yml automatisch angelegt. Beim ersten Start des Containers werden alle sql-Dateien in data/sql ausgeführt und so alle benötigten Tabellen und einige Beispieldaten erstellt

Zur besseren Verwaltung der Datenbank steht zusätzlich ein phpmyadmin-Container zur Verfügung, welcher über Port 8081 erreichbar ist

Verwendetes Framework

Als Framework wird Slim 4 verwendet. Slim ist, wie der Name bereits sagt, ein schlankes PHP-Framework, welches einfache Mittel zum Routing und Behandeln von http-Requests bereitstellt. Die Routen sind in der app/routes.php konfiguriert und verweisen auf einen Handler als Callable. An diesen Handler wird der Request dann vom Framework weitergeleitet. Der Handler stellt somit den Einstiegspunkt in die Geschäftslogik für die entsprechende Route dar.

Dependency-Injection wird durch die Bibliothek php-di realisiert. Die Konfiguration zum Auflösen der Abhängigkeiten befindet sich in der Klasse ApplicationConfig. Allerdings kann php-di die meisten Abhängigkeiten durch Reflection-Klassen automatisch auflösen, sodass in den meisten Fällen weder manuelle Konfiguration noch das Erstellen einer Factory-Klasse notwendig sind.

Codestruktur

Der Code der Applikation befindet sich im Ordner src und ist dort aufgeteilt in Handler, MySQL, Repository und Value. In dem Ordner Handler befinden sich die im obigen Abschnitt beschriebenen Handler-Klassen. Im Ordner MySQL sind Klassen zum Erstellen der Verbindung zur Datenbank. Unter Repository werden Klassen eingeordnet, die nach dem Repository-Pattern die Zugriffe auf die Datenbank kapseln. Value-Klassen dienen der Kapselung Domänenspezifischer Werte innerhalb der Applikation (z.B. des Titels). Die Klassen im Ordner Entity stellen Entities, also Werte beinhaltende Objekte mit einem einzigartigen Identifier dar. Die Klasse NewsArticle dient konkret zur Repräsentation einer Zeile in der Datenbank.

Die Konfiguration für Routen und Middleware befindet sich im Verzeichnis app.

Unit-Tests

Das Projekt wird mit PHPUnit getestet. Die Unit-Tests befinden sich im Verzeichnis tests, welches genau so strukturiert ist wie das src-Verzeichnis. Die Tests können mit dem Befehl docker-compose run --rm php-web composer test --migrate-configuration ausgeführt werden.

news-articles-backend's People

Contributors

trimethylpentan avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.