For the complete documentation index, see llms.txt. This page is also available as Markdown.

Endpunkte

Endpunkte werden durch ihre URI und HTTP-Methode definiert. Aufrufe an den Universal-Server, die mit Ihrem definierten API-Endpunkt und der Methode übereinstimmen, führen das API-Endpunktskript aus.

New-PSUEndpoint -Url '/endpoint' -Method 'GET' -Endpoint {
   "Hello, world!"
}

Um die obige Methode aufzurufen, können Sie Invoke-RestMethod verwenden.

Invoke-RestMethod http://localhost:5000/endpoint

Beim Definieren von Endpunkten in der Management-API können Sie den Aufruf von New-PSUEndpoint überspringen, da die Admin-Konsole ihn definiert.

API Properties

Der einzige Inhalt, den Sie im Editor angeben müssen, ist das Skript, das Sie aufrufen möchten.

API Content

HTTP-Methoden

Endpunkte können eine oder mehrere HTTP-Methoden definiert haben. Um zu bestimmen, welche Methode von einem Endpunkt verwendet wird, verwenden Sie die integrierte Variable $Method.

Variable URL

URLs können variable Segmente enthalten. Sie können ein variables Segment mit einem Doppelpunkt (:) kennzeichnen. Zum Beispiel würde die folgende URL eine Variable für die ID des Benutzers bereitstellen. Die Variable $Id wird innerhalb des Endpunkts definiert, wenn dieser ausgeführt wird. Variablen müssen in derselben Endpunkt-URL eindeutig sein.

Um diese API aufzurufen und die ID anzugeben, gehen Sie wie folgt vor:

Query-String-Parameter

Query-String-Parameter werden automatisch als Variablen an Endpunkte übergeben, auf die Sie dann zugreifen können. Wenn Sie beispielsweise einen Endpunkt haben, der eine $Id-Variable erwartet, können Sie diese im Query-String angeben.

Der resultierende Invoke-RestMethod-Aufruf muss dann den Query-String-Parameter enthalten.

Wenn Sie mehrere Query-String-Parameter verwenden, stellen Sie sicher, dass Ihre URL von Anführungszeichen umgeben ist, damit PowerShell sie korrekt übersetzt. Ein kaufmännisches Und (&) ohne Anführungszeichen verursacht sowohl in Windows PowerShell als auch in PowerShell 7 Probleme.

Sicherheitsüberlegungen

Wenn Sie Eingaben über Query-String-Parameter akzeptieren, sind Sie möglicherweise anfällig für CWE-914: Improper Control of Dynamically-Identified Variables. Erwägen Sie die Verwendung eines param-Blocks, um sicherzustellen, dass nur gültige Parameter an den Endpunkt übergeben werden.

Nachfolgend ein Beispiel für CWE-914. Fügen Sie einen $IsChallengePassed-Query-String-Parameter hinzu, um die Challenge zu umgehen.

Um dieses spezielle Problem zu vermeiden, können Sie einen param-Block verwenden.

Anfrage-Header sind in APIs über die Variable $Headers verfügbar. Die Variable ist eine Hashtabelle. Um auf einen Header zuzugreifen, verwenden Sie die folgende Syntax:

Cookies

Anfrage-Cookies sind in APIs über die Variable $Cookies verfügbar. Die Variable ist eine Hashtabelle. Um auf ein Cookie zuzugreifen, verwenden Sie die folgende Syntax:

Senden Sie Anfrage-Cookies mit dem Cmdlet New-PSUApiResponse zurück. Verwenden Sie den Parameter -Cookies mit einer bereitgestellten Hashtabelle.

Body

Um auf einen Anfragekörper zuzugreifen, greifen Sie einfach auf die Variable $Body zu. Die Universal-Variable $Body ist eine Zeichenfolge. Wenn Sie JSON erwarten, sollten Sie ConvertFrom-Json verwenden.

Um den obigen Endpunkt aufzurufen, geben Sie den Body von Invoke-RestMethod an.

Live-Protokoll

Sie können die Live-Protokollinformationen für jeden Endpunkt anzeigen, indem Sie auf die Registerkarte „Log“ klicken. Live-Protokolle enthalten URL, HTTP-Methode, Quell-IP-Adresse, PowerShell-Streams, Statuscode, zurückgegebenen Content-Type und HTTP-Inhaltslänge.

Sie können mit Cmdlets wie Write-Host aus Ihren Endpunkten heraus in das Live-Protokoll schreiben.

Live-Protokoll des Endpunkts

Testen

Sie können die Registerkarte „Test“ im Endpunkt-Editor verwenden, um Ihre APIs zu testen. Mit diesem Testwerkzeug können Sie Header, den Query-String und den Body anpassen. Sie können auch die Authentifizierung und Autorisierung für den Test anpassen.

Registerkarte „Test“ des Endpunkts

Bei Verwendung der Registerkarte „Test“ führen alle Änderungen an den Werten des Tests zu einem aktualisierten Codeblock, den Sie dann in PowerShell verwenden können. Klicken Sie auf die Registerkarte „Code“, um den Testcode anzuzeigen.

Zusätzlich werden im Tester durchgeführte Tests 30 Tage lang gespeichert, um ein erneutes Testen zu ermöglichen, ohne alle Eigenschaften neu konfigurieren zu müssen. Ein Klick auf die Schaltfläche „Apply“ richtet das Testwerkzeug mit denselben Eigenschaften ein.

Testverlauf

Formulardaten

Sie können Daten als Formulardaten an einen Endpunkt übergeben. Formulardaten werden als Parameter an Ihren Endpunkt übergeben.

Sie können dann eine Hashtabelle mit Invoke-RestMethod verwenden, um Formulardaten zu übergeben.

JSON-Daten

Sie können JSON-Daten an einen Endpunkt übergeben und sie werden automatisch an einen param-Block gebunden.

Sie können dann JSON-Daten an den Endpunkt senden.

Param-Block

Sie können innerhalb Ihres Skripts einen param-Block verwenden, um obligatorische Parameter zu erzwingen und Standardwerte für optionale Parameter wie Query-String-Parameter bereitzustellen. Variablen wie $Body, $Headers und $User werden automatisch bereitgestellt.

Im folgenden Beispiel ist der Parameter $Name obligatorisch und der Parameter $Role hat den Standardwert Default.

Wenn Sie den param-Block mit Routenparametern wie im obigen Beispiel verwenden, müssen Sie die Routenvariable in Ihrem Parameter angeben. Wird sie nicht angegeben, haben Sie keinen Zugriff auf diesen Wert.

Zum Beispiel ist die folgende Variable $Name immer $null. Der Endpunkt gibt immer false zurück.

Wenn Sie das Attribut CmdletBinding oder Parameter innerhalb Ihres param-Blocks verwenden, erzwingt der Endpunkt strikt, welche Parameter in den Endpunkt gelangen dürfen.

Zum Beispiel erzwingt das Folgende, dass der Parameter „name“ angegeben wird.

Allerdings können Sie dem Endpunkt keine zusätzlichen Parameter angeben. Das Folgende verursacht einen Fehler.

Wenn Sie Ihren Endpunkt so ändern, dass er das Attribut Parameter nicht verwendet, können Sie beliebig viele Parameter übergeben, die dann als Variablen und nicht als Parameter des Endpunkts gebunden werden.

Parametersätze für Methoden

Sie können Parametersätze mithilfe von Methodenparametern definieren. Standardmäßig untersucht PowerShell Universal den param-Block, um festzustellen, ob diese HTTP-Methodennamen Get, Put, Post, Delete oder andere angegeben sind, und bindet sie automatisch ein. Wenn Endpunkte mehrere Methoden akzeptieren, kann möglicherweise nicht anhand der bereitgestellten Daten bestimmt werden, welcher Parametersatz aufgerufen werden soll. Im Beispiel unten akzeptieren sowohl Get als auch Post den Parameter „name“. Es gibt außerdem keine Möglichkeit, das Post ohne einen Namen aufzurufen, sodass die Validierung fehlschlagen könnte.

Um dies zu beheben, fügen Sie die Parameter Post und Get hinzu, die Teil ihres jeweiligen Parametersatzes sind. PowerShell Universal bindet diesen Parameter ein, um sicherzustellen, dass der richtige Parametersatz aufgerufen wird.

Daten zurückgeben

Es wird angenommen, dass von Endpunkten zurückgegebene Daten JSON-Daten sind. Wenn Sie ein Objekt aus dem Endpunkt-Skriptblock zurückgeben, wird es automatisch in JSON serialisiert. Wenn Sie eine andere Art von Daten zurückgeben möchten, können Sie eine beliebig formatierte Zeichenfolge zurückgeben.

Dateien verarbeiten

Dateien hochladen

Sie können hochgeladene Dateien verarbeiten, indem Sie den Parameter $Data verwenden, um auf das Byte-Array der an den Endpunkt hochgeladenen Daten zuzugreifen.

Sie können die Datei auch in einem Verzeichnis speichern.

Dateien herunterladen

Sie können Dateien mit dem Cmdlet New-PSUApiResponse senden.

Benutzerdefinierte Antworten zurückgeben

Sie können benutzerdefinierte Antworten aus Endpunkten zurückgeben, indem Sie das Cmdlet New-PSUApiResponse in Ihrem Endpunkt verwenden. Mit diesem Cmdlet können Sie den Statuscode und den Inhaltstyp festlegen und sogar die byte[]-Daten für den zurückzugebenden Inhalt angeben.

Sie können auch benutzerdefinierte Body-Daten mit dem Parameter -Body von New-PSUApiResponse zurückgeben.

Der Aufruf der REST-Methode gibt den benutzerdefinierten Fehlercode zurück.

Sie können den Inhaltstyp der zurückgegebenen Daten mit dem Parameter -ContentType steuern.

Sie können die Antwort-Header mit einer Hashtabelle von Werten steuern, die Sie an den Parameter -Headersübergeben.

Persistente Runspaces

Persistente Runspaces ermöglichen es Ihnen, den Runspace-Status zwischen API-Aufrufen beizubehalten. Dies ist wichtig für Benutzer, die innerhalb ihrer Endpunkte eine Art von Initialisierung durchführen, die sie bei nachfolgenden API-Aufrufen nicht ausführen möchten.

Standardmäßig werden Runspaces nach jeder Ausführung zurückgesetzt. Dadurch werden Variablen, Module und Funktionen entfernt, die während der Ausführung der API definiert wurden.

Um persistente Runspaces zu aktivieren, müssen Sie eine Umgebung für Ihre API konfigurieren. Setzen Sie den Parameter -PersistentRunspace, um diese Funktion zu aktivieren. Dies wird im Skript environments.ps1 konfiguriert.

Sie können die API-Umgebung dann im Skript settings.ps1 zuweisen.

Timeout

Standardmäßig laufen Endpunkte nicht ab. Um ein Timeout für Ihre Endpunkte festzulegen, können Sie den Parameter -Timeout von New-PSUEndpoint verwenden. Das Timeout wird in Sekunden angegeben.

Externer Endpunktinhalt

Sie können den Pfad zu einer externen Endpunktinhaltsdatei mit dem Parameter -Path von New-PSUEndpoint definieren. Der Pfad ist relativ zum Verzeichnis .universal im Repository.

Der Inhalt der Datei endpoints.ps1 lautet dann folgendermaßen:

C#-APIs

C#-APIs werden als Plugin aktiviert.

Es gibt keine Benutzeroberfläche zum Erstellen einer C#-API, daher müssen Sie dies über Konfigurationsdateien tun. Erstellen Sie zunächst eine .cs-Datei, die Ihre API ausführt.

Sie haben Zugriff auf einen request-Parameter, der alle Daten über die API-Anfrage enthält.

Sie haben außerdem Zugriff auf eine ServiceProvider-Eigenschaft, die Ihnen den Zugriff auf Dienste innerhalb von PowerShell Universal ermöglicht. Diese sind derzeit nicht gut dokumentiert, aber nachfolgend finden Sie ein Beispiel für den Neustart eines Dashboards.

Einige andere nützliche Dienste sind:

  • IDatabase

  • IApiService

  • IConfigurationService

  • IJobService

Sie können wählen, eine ApiResponse von Ihrem Endpunkt zurückzugeben.

Sobald Sie Ihre C#-Endpunktdatei definiert haben, können Sie sie durch Bearbeiten von endpoints.ps1 hinzufügen.

Der PowerShell Universal-Dienst kompiliert und führt C#-Endpunkte automatisch aus.

API

Siehe auch

Zuletzt aktualisiert

War das hilfreich?