# Strapi

Strapi ist ein Content-Management-System (CMS) und Webframework, das als Open-Source-Software entwickelt wird. Es zählt zur Gruppe der Headless CMS und stellt damit kein eigenes Frontend bereit, sondern nur eine Programmierschnittstelle (API), über die Daten an andere Anwendungen ausgeliefert werden. Diese API wird automatisch aus einem Datenmodell generiert, worauf auch der Name des CMS zurückzuführen ist (Bootstrap your API).
Die Software wird federführend vom gleichnamigen französischen Hersteller entwickelt, der proprietäre Zusatzfunktionen, sowie Support für das CMS anbietet.
Das System wurde in JavaScript für die Node.js-Laufzeitumgebung geschrieben.

## Funktionen

Strapi ist einerseits ein CMS, denn es bietet Funktionen, die typischerweise in CMS zu finden sind, wie einen Texteditor, eine Nutzerverwaltung und eine Medienbibliothek. Andererseits ist es ein Webframework für Webservices, da es die Entwicklung eigener Funktionen und API-Endpunkte möglich macht.

### Datenhaltung

Für die Datenhaltung kann Strapi unterschiedliche Datenbanken verwenden, darunter die relationalen Datenbanken SQLite, MySQL und MariaDB. Datenmodelle werden dabei über Konfigurationsdateien erstellt, die im Datenformat JSON geschrieben werden. Hierbei kann aber auch ein visueller Editor genutzt werden, der die Konfigurationsdateien dann generiert. Diese Datenmodelle werden dann als Datenbanktabellen in der jeweiligen Datenbank erstellt.

### API

Aus den konfigurierten Datenmodellen wird automatisch eine API generiert, die pro Datenmodell Endpunkte für das Lesen, Erstellen, Bearbeiten und Löschen von Einträgen bereitstellt. Zugleich wird eine abrufbare Dokumentation erstellt, die diese Endpunkte beschreibt.
Die API bietet Funktionen zum Filtern und Paginieren der Daten sowie schreibenden Zugriff. Mithilfe eines GraphQL-Plugins besteht zusätzlich die Möglichkeit, komplexe Datenbeziehungen effizient abzufragen. Volltextsuche, Nutzerverwaltung und Echtzeitzugriffe im Push-Modell bietet die API hingegen nicht.

### Programmierung

Die API kann in JavaScript über Middleware programmiert, verändert oder erweitert werden. Das erlaubt zum Beispiel die Einbindung eigener Endpunkte, Geschäftslogik und Datenvalidierung. Strapi basiert auf dem Webframework Koa.js, einem Nachfolger von Express.js. Damit können Entwickler auch bereits existierende Middleware nutzen, die mit Koa.js kompatibel ist.

### Nutzerschnittstelle

Als CMS bietet Strapi über eine Webanwendung auch eine Nutzerschnittstelle für Administratoren, Autoren und Nutzer ohne technische Vorkenntnisse. Das Erstellen von Einträgen und das Schreiben von Texten sind über die Webanwendung möglich. Die Eingabefelder und Funktionen der Anwendung passen sich dabei den jeweiligen Datenmodellen an. Ist an einem Datentyp zum Beispiel ein Datumsfeld hinterlegt, zeigt die Nutzerschnittstelle einen Kalender als Eingabefeld an. Zur Erstellung von Texten steht ein WYSIWYG-Editor zur Verfügung. Auch das Verwalten von Nutzern und Zugangsrechten ist möglich. Es können dabei eigene Rollen erstellt und Nutzern zugewiesen werden.
Die Webanwendung kann von Entwicklern an die Erfordernisse der eigenen Nutzer angepasst werden. Dabei können auch bestehende Komponenten des CMS erweitert oder ausgetauscht werden. Für die Programmierung der Webanwendung wird die JavaScript-Bibliothek React eingesetzt.

## Einsatzzweck

Strapi dient als Backend für Webseiten, die mithilfe eines reinen Frontend-Webframeworks wie zum Beispiel React entwickelt werden. Dabei kann es sich um Single-Page-Webanwendungen handeln, aber auch um statische Websitegeneratoren wie zum Beispiel Hugo. Darüber hinaus kann das Framework für die Datenhaltung und Geschäftslogik mobiler Anwendungen genutzt werden. Da es seine Programmierschnittstelle über HTTP bereitstellt, können mehrere Anwendungen und Dienste auf die Daten des CMS zugreifen.
Da Strapi nur eine API und keine Webseiten ausliefert, ist es jedoch nicht geeignet für Projekte, die direkt HTML-Seiten erstellen und ausliefern möchten und eine integrierte Lösung suchen. Darüber hinaus richtet es sich ausschließlich an Softwareentwickler und kann nicht ohne Kenntnisse der Webentwicklung oder der Programmiersprache JavaScript genutzt werden.

## Geschichte

Strapi wurde ursprünglich 2015 von den Entwicklern Pierre Burgy, Aurélien Georget und Jim Laurie im Rahmen eines Studienprojektes entwickelt. Die Entwickler arbeiteten zuvor mit bekannten CMS wie WordPress oder Drupal und suchten nach einer Lösung mit flexiblem, austauschbarem Frontend, die leichter an eigene Anforderungen anpassbar ist. Sie gründeten Strapi 2016 als Unternehmen in Paris, das Support und Zusatzmodule für das zugrundeliegende Open Source CMS anbietet.
Das Projekt erhielt im Oktober 2019 eine Finanzierung 4 Millionen Dollar durch den Risikokapitalgeber Accel und weitere Partner. Im Mai 2020 folgte eine weitere Finanzierung über 10 Millionen Dollar.

## Verbreitung

Das CMS verzeichnet seit seiner Veröffentlichung schnell steigende Download- und Nutzungszahlen. Bis März 2021 verbuchte Strapi über 2,4 Millionen Downloads vom Repository des Paketmanagers npm und erhielt über 34.000 Sterne auf der Entwicklungsplattform GitHub und gilt damit als eines der beliebtesten Node.js-Webframeworks. Auch die Zahl der Entwickler, die zum Projekt beigetragen haben, ist im Februar 2021 auf GitHub auf über 600 angestiegen. Zu den bekanntesten Unternehmen und Organisationen, die Strapi einsetzen, zählen IBM, Walmart, Toyota, Société Générale und die NASA.