more documentation xDDD
This commit is contained in:
parent
4b31c4142d
commit
755ccea1e0
@ -39,8 +39,8 @@ fields:
|
||||
# Außerdem sind hier feinere Einstellungen für den Index möglich.
|
||||
|
||||
# Mehr dazu im "indexes" Kapitel
|
||||
# indexes:
|
||||
# - !include democol/textindex.yml
|
||||
indexes:
|
||||
- !include democol/textindex.yml
|
||||
|
||||
# Standardsprache für Text-Index in der Datenbank
|
||||
defaultLanguage: de
|
||||
|
@ -0,0 +1,6 @@
|
||||
name: fulltextindex # Ein eindeutiger Name für den Index. Es ist optional, wird jedoch empfohlen, um den Index später leicht identifizieren zu können.
|
||||
key: # Bestimmt, auf welche Felder der Index angewendet werden soll. Dies kann ein einfacher String sein, wenn der Index nur ein Feld umfasst, oder ein Array von Strings, wenn der Index mehrere Felder umfasst.
|
||||
- $text:$** # definiert einen Volltextindex über alle Felder. Der spezielle Operator $text wird verwendet, um einen Volltextindex zu erstellen, und der Operator $\*\* bezeichnet alle Felder in der Sammlung.
|
||||
background: true # Wenn auf true gesetzt, erzwingt dies, dass der Index eindeutige Werte enthält. Wenn Sie versuchen, einen Eintrag mit einem bereits indizierten Wert hinzuzufügen, wird ein Fehler ausgelöst.
|
||||
unique: false # Wenn auf true gesetzt, erzwingt dies, dass der Index eindeutige Werte enthält. Wenn Sie versuchen, einen Eintrag mit einem bereits indizierten Wert hinzuzufügen, wird ein Fehler ausgelöst.
|
||||
defaultLanguage: german # Wird verwendet, um die Sprache für Textindizes festzulegen. Dies ist wichtig für die Volltextsuche, da verschiedene Sprachen unterschiedliche Tokenisierungs- und Stemmungsregeln haben.
|
@ -8,6 +8,7 @@
|
||||
- [/user](restapi/user.md)
|
||||
- [/project](restapi/project.md)
|
||||
- [/\_/NS/COLLECTION](restapi/collection.md)
|
||||
- [/_/NS/_/assets/ASSETSNAME](restapi/assets.md)
|
||||
- Projekt Konfiguration
|
||||
- [Ordnerstruktur](projektkonfig/ordnerstruktur.md)
|
||||
- [config.yml](projektkonfig/config.yml.md)
|
||||
@ -29,9 +30,6 @@
|
||||
- [field.meta..eval](admin-javascript-kontext/field.meta..eval.md)
|
||||
- Server Javascript Kontext
|
||||
- [Allgmeines](server-javascript-kontext/allgemeines.md)
|
||||
- [hook](server-javascript-kontext/hook.md)
|
||||
- [job](server-javascript-kontext/job.md)
|
||||
- [validator](server-javascript-kontext/validator.md)
|
||||
- Packages
|
||||
- [user](server-javascript-kontext/packages/user.md)
|
||||
- [response](server-javascript-kontext/packages/response.md)
|
||||
|
@ -1 +1,104 @@
|
||||
# hooks
|
||||
|
||||
Hooks in Tibi sind spezielle Funktionen, die bestimmte Teile der HTTP-Anfragen und -Antworten manipulieren können. Sie erlauben Ihnen, den Datenfluss und die Abläufe zu bestimmten Zeitpunkten im Lebenszyklus einer HTTP-Anfrage zu beeinflussen.
|
||||
|
||||
Jeder Hook ist einer bestimmten HTTP-Methode (z.B. GET, POST, PUT, DELETE) und einem bestimmten Schritt in diesem Prozess zugeordnet. Die verfügbaren Schritte variieren je nach Methode und können beinhalten:
|
||||
|
||||
- read (GET)
|
||||
- return (GET, POST, PUT, DELETE)
|
||||
- bind (POST, PUT)
|
||||
- validate (POST, PUT)
|
||||
- create (POST)
|
||||
- update (PUT)
|
||||
- delete (DELETE)
|
||||
|
||||
Jeder dieser Schritte wird an einem spezifischen Punkt während der Verarbeitung einer HTTP-Anfrage oder -Antwort ausgeführt. Die genaue Reihenfolge und das Verhalten der Hooks ist in der jeweiligen Methode definiert.
|
||||
|
||||
## Hook Implementierung
|
||||
|
||||
Jeder Hook ist in einer separaten JavaScript-Datei implementiert, die im hooks-Ordner Ihres Projekts gespeichert ist. Der Pfad zu dieser Datei wird in der config.yml angegeben.
|
||||
|
||||
Ein Hook ist eine Funktion, die eine context-Variable zur Verfügung hat, welche Informationen und Methoden für die aktuelle Anfrage bereitstellt. Der Rückgabewert dieser Funktion wird verwendet, um die Verarbeitung der Anfrage oder Antwort zu beeinflussen.
|
||||
|
||||
Zwei spezielle Typen, `HookResponse` und `HookException`, werden in Hooks verwendet, um Daten zu manipulieren und Fehler zu signalisieren.
|
||||
|
||||
### HookResponse
|
||||
|
||||
Die HookResponse ist das Objekt, das von einem Hook zurückgegeben wird. Es kann verwendet werden, um Daten zu manipulieren, die in die Datenbank geschrieben oder an den Benutzer zurückgegeben werden.
|
||||
|
||||
Es beinhaltet:
|
||||
|
||||
- `data`: Daten, die in die Datenbank geschrieben werden. Sie können diese Daten im Hook ändern, bevor sie in die Datenbank geschrieben werden.
|
||||
- `results`: Daten, die an den Benutzer zurückgegeben werden. Sie können diese Daten im Hook ändern, bevor sie an den Benutzer zurückgegeben werden.
|
||||
|
||||
### HookException
|
||||
|
||||
Eine HookException ist ein Fehler, der in einem Hook geworfen werden kann. Sie können eine HookException verwenden, um einen Fehler zu signalisieren und die Verarbeitung der Anfrage oder Antwort zu stoppen.
|
||||
|
||||
Eine HookException kann folgende Eigenschaften haben:
|
||||
|
||||
- `status`:
|
||||
HTTP-Statuscode des Fehlers.
|
||||
- `html`:
|
||||
HTML-Nachricht des Fehlers.
|
||||
- `string`:
|
||||
Textnachricht des Fehlers.
|
||||
- `bytes`:
|
||||
Binäre Daten des Fehlers.
|
||||
- `json`:
|
||||
JSON-Daten des Fehlers.
|
||||
- `file`:
|
||||
Dateipfad der Fehlermeldung.
|
||||
- `log`:
|
||||
Wenn true, wird der Fehler im Serverprotokoll aufgezeichnet.
|
||||
|
||||
Hook Beispiel
|
||||
|
||||
Hier ist ein Beispiel für einen Hook, der die GET-Methode bearbeitet:
|
||||
|
||||
```js
|
||||
;(function () {
|
||||
/** @type {HookResponse}*/ // @ts-ignore
|
||||
let hookResponse
|
||||
let request = context.request()
|
||||
if (request.query("rateIt")) {
|
||||
let orderNumber
|
||||
orderNumber = Number(request.query("orderNumber"))
|
||||
|
||||
if (isNaN(orderNumber))
|
||||
throw {
|
||||
status: 400,
|
||||
message: "Invalid order number.",
|
||||
}
|
||||
|
||||
/** @type {Order} */ // @ts-ignore
|
||||
let order = context.db.find("order", {
|
||||
filter: {
|
||||
sequence: orderNumber,
|
||||
},
|
||||
})[0]
|
||||
|
||||
if (!order)
|
||||
throw {
|
||||
status: 400,
|
||||
message: "No entry with this order number.",
|
||||
}
|
||||
|
||||
if (order.deliveryAddress.postcode != request.query("postalcode"))
|
||||
throw {
|
||||
status: 403,
|
||||
message: "Error",
|
||||
}
|
||||
|
||||
hookResponse = {
|
||||
filter: {
|
||||
orderId: order.id,
|
||||
},
|
||||
}
|
||||
|
||||
return hookResponse
|
||||
}
|
||||
})()
|
||||
```
|
||||
|
||||
In diesem Beispiel wird zuerst die Anfrage analysiert und eine Bedingung überprüft. Wenn die Bedingung erfüllt ist, wird ein bestimmtes Element in der Datenbank gesucht. Wenn das Element gefunden wird und bestimmte Kriterien erfüllt, wird ein HookResponse-Objekt erstellt und zurückgegeben. Wenn während des Prozesses Fehler auftreten, werden entsprechende HookException-Objekte geworfen.
|
||||
|
@ -1,3 +1,30 @@
|
||||
# indexes Liste
|
||||
|
||||
TODO
|
||||
Die indexes-Anweisung in der Konfigurationsdatei einer Sammlung (collection.yml) ist ein Array von Indexdefinitionen. Indizes werden in Datenbanken verwendet, um die Suchleistung zu optimieren. Indem Sie die richtigen Indizes definieren, können Sie die Effizienz Ihrer Anwendung verbessern.
|
||||
|
||||
Jede Indexdefinition ist ein Objekt mit bestimmten Eigenschaften:
|
||||
|
||||
- `name`:
|
||||
Ein eindeutiger Name für den Index. Es ist optional, wird jedoch empfohlen, um den Index später leicht identifizieren zu können.
|
||||
|
||||
- `key`:
|
||||
Bestimmt, auf welche Felder der Index angewendet werden soll. Dies kann ein einfacher String sein, wenn der Index nur ein Feld umfasst, oder ein Array von Strings, wenn der Index mehrere Felder umfasst.
|
||||
|
||||
Zum Beispiel key: ["$text:$**"] definiert einen Volltextindex über alle Felder. Der spezielle Operator $text wird verwendet, um einen Volltextindex zu erstellen, und der Operator $\*\* bezeichnet alle Felder in der Sammlung.
|
||||
|
||||
Eine andere mögliche Indexdefinition könnte so aussehen: key: ["file.type"]. Dies würde einen Index auf dem Feld type innerhalb des Unterobjekts file erstellen.
|
||||
|
||||
- `unique`:
|
||||
Wenn auf true gesetzt, erzwingt dies, dass der Index eindeutige Werte enthält. Wenn Sie versuchen, einen Eintrag mit einem bereits indizierten Wert hinzuzufügen, wird ein Fehler ausgelöst.
|
||||
|
||||
- `background`:
|
||||
Wenn auf true gesetzt, erstellt die Datenbank den Index im Hintergrund, um die Leistungsauswirkungen auf andere Operationen zu minimieren.
|
||||
|
||||
- `defaultLanguage`:
|
||||
Wird verwendet, um die Sprache für Textindizes festzulegen. Dies ist wichtig für die Volltextsuche, da verschiedene Sprachen unterschiedliche Tokenisierungs- und Stemmungsregeln haben.
|
||||
|
||||
Ein Beispiel für die Verwendung von Indizes in der Sammlungskonfigurationsdatei könnte so aussehen:
|
||||
|
||||
!!!include(../api/collections/democol/textindex.yml)!!!
|
||||
|
||||
In diesem Beispiel wird ein Textindex namens textindex erstellt, der alle Felder der Sammlung abdeckt. Der Index wird im Hintergrund erstellt und verwendet Deutsch als Standardtextsprache.
|
||||
|
@ -8,4 +8,4 @@ Der Aufbau eines Jobs ausgelagert in einer Datei sieht beispielsweise folgenderm
|
||||
|
||||
!!!include(../api/jobs/demojob.yml)!!!
|
||||
|
||||
Die Möglichkeiten innerhalb der Javascript-Datei werden im Kapitel [Javascript Kontext](./../server-javascript-kontext/job.md) beschrieben.
|
||||
Die Möglichkeiten innerhalb der Javascript-Datei werden im Kapitel [Javascript Kontext](./../server-javascript-kontext/allgemeines.md) beschrieben.
|
||||
|
26
docs/md/restapi/assets.md
Normal file
26
docs/md/restapi/assets.md
Normal file
@ -0,0 +1,26 @@
|
||||
# /assets
|
||||
|
||||
Die /assets-API ist dazu gedacht, den Zugriff auf bestimmte Ordnerpfade zu ermöglichen, die direkt über den Tibi-Server erreichbar sind. Diese Pfade werden in der Konfigurationsdatei (config.yml) definiert und relativ zu dieser Datei interpretiert. Jeder dieser Pfade wird durch einen eindeutigen Namen identifiziert, der in der URL verwendet wird.
|
||||
URL-Struktur
|
||||
|
||||
Die Struktur der URL für den Zugriff auf die Assets ist wie folgt:
|
||||
|
||||
- TIBI-SERVER-URL/api/v1/_/NAMESPACE/_/assets/NAME/
|
||||
|
||||
Hierbei steht NAME für den in der Konfigurationsdatei festgelegten Namen für den Pfad. Wenn beispielsweise ein Pfad mit dem Namen _dist_ definiert ist, der auf den Ordner ../frontend/_dist_ relativ zur config.yml zeigt, würde die entsprechende URL so aussehen:
|
||||
|
||||
- TIBI-SERVER-URL/api/v1/_/NAMESPACE/_/assets/_dist_/
|
||||
|
||||
## Zugriffsmethode
|
||||
|
||||
Über die /assets-API ist ausschließlich ein unbeschränkter Lesezugriff (GET-Methode) möglich. Dies bedeutet, dass Sie über diese API Dateien aus den definierten Pfaden abrufen können, aber keine Änderungen vornehmen oder Dateien hochladen können.
|
||||
Konfigurationsbeispiel
|
||||
|
||||
In der config.yml könnten Sie einen Asset-Pfad wie folgt definieren:
|
||||
|
||||
```yaml
|
||||
name: _dist_
|
||||
path: ../frontend/_dist_
|
||||
```
|
||||
|
||||
Dies würde den Zugriff auf Dateien im Ordner ../frontend/_dist_ relativ zur config.yml über die URL TIBI-SERVER-URL/api/v1/_/NAMESPACE/_/assets/_dist_/ ermöglichen.
|
@ -36,7 +36,7 @@ interface Collection {
|
||||
|
||||
## GET /{namespace}/{collection}/{id}
|
||||
|
||||
iese Anforderung ruft einen bestimmten Eintrag in einer Collection ab. Sie nimmt den Namespace und Namen der Collection sowie die ID des abzurufenden Eintrags als Parameter an.
|
||||
Diese Anforderung ruft einen bestimmten Eintrag in einer Collection ab. Sie nimmt den Namespace und Namen der Collection sowie die ID des abzurufenden Eintrags als Parameter an.
|
||||
|
||||
### Anforderungsparameter
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user