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

Endpoints

Los endpoints se definen por su URI y su método HTTP. Las llamadas realizadas al servidor Universal que coincidan con el endpoint de API y el método definidos ejecutan el script del endpoint de API.

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

Para invocar el método anterior, puede utilizar Invoke-RestMethod.

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

Al definir endpoints en la API de gestión, puede omitir la llamada a New-PSUEndpoint, ya que la consola de administración la define.

Propiedades de la API

El único contenido que debe proporcionar en el editor es el script que desea llamar.

Contenido de la API

Métodos HTTP

Los endpoints pueden tener uno o varios métodos HTTP definidos. Para determinar qué método utiliza un endpoint, use la variable integrada $Method.

URL variable

Las URL pueden contener segmentos variables. Puede indicar un segmento variable mediante dos puntos (:). Por ejemplo, la siguiente URL proporcionaría una variable para el ID del usuario. La variable $Id se definirá dentro del endpoint cuando este se ejecute. Las variables deben ser únicas dentro de la misma URL de endpoint.

Para llamar a esta API y especificar el ID, haga lo siguiente:

Parámetros de cadena de consulta

Los parámetros de cadena de consulta se pasan automáticamente a los endpoints como variables a las que luego puede acceder. Por ejemplo, si tiene un endpoint que espera una variable $Id, puede proporcionarla en la cadena de consulta.

La llamada resultante a Invoke-RestMethod debe incluir entonces el parámetro de cadena de consulta.

Cuando utilice varios parámetros de cadena de consulta, asegúrese de que la URL esté entre comillas para que PowerShell la interprete correctamente. Incluir un ampersand (&) sin comillas causará problemas tanto en Windows PowerShell como en PowerShell 7.

Consideraciones de seguridad

Al aceptar entradas mediante parámetros de cadena de consulta, puede ser vulnerable a CWE-914: Improper Control of Dynamically-Identified Variables. Considere utilizar un bloque param para asegurarse de que solo se proporcionen parámetros válidos al endpoint.

A continuación se muestra un ejemplo de CWE-914. Incluya un parámetro de cadena de consulta $IsChallengePassed para omitir el desafío.

Para evitar este problema en concreto, puede utilizar un bloque param.

Cabeceras

Las cabeceras de solicitud están disponibles en las API mediante la variable $Headers. La variable es una tabla hash. Para acceder a una cabecera, utilice la siguiente sintaxis:

Cookies

Las cookies de solicitud están disponibles en las API mediante la variable $Cookies. La variable es una tabla hash. Para acceder a una cookie, utilice la siguiente sintaxis:

Devuelva las cookies de solicitud con el cmdlet New-PSUApiResponse. Utilice el parámetro -Cookies con una tabla hash proporcionada.

Cuerpo

Para acceder al cuerpo de una solicitud, simplemente accederá a la variable $Body. En Universal, la variable $Body será una cadena. Si espera JSON, debe utilizar ConvertFrom-Json.

Para llamar al endpoint anterior, especifique el cuerpo de Invoke-RestMethod.

Registro en directo

Puede ver la información del registro en directo de cualquier endpoint haciendo clic en la pestaña de registro. Los registros en directo incluyen la URL, el método HTTP, la dirección IP de origen, los flujos de PowerShell, el código de estado, el Content Type devuelto y la longitud del contenido HTTP.

Puede escribir en el registro en directo desde dentro de sus endpoints con cmdlets como Write-Host.

Registro en directo del endpoint

Pruebas

Puede utilizar la pestaña Test del editor de endpoints para probar sus API. Con esta herramienta de prueba, puede ajustar las cabeceras, la cadena de consulta y el cuerpo. También puede ajustar la Autenticación y la Autorización para la prueba.

Pestaña Test del endpoint

Al utilizar la pestaña de prueba, cualquier cambio en los valores de la prueba dará lugar a un bloque de código actualizado que podrá utilizar después en PowerShell. Haga clic en la pestaña Code para ver el código de prueba.

Además, las pruebas realizadas con el probador se almacenarán durante 30 días para permitir volver a probar sin tener que reconfigurar todas las propiedades. Al hacer clic en el botón Apply se configurará la herramienta de prueba con las mismas propiedades.

Historial de pruebas

Datos de formulario

Puede pasar datos a un endpoint como datos de formulario. Los datos de formulario se pasarán a su endpoint como parámetros.

Después puede utilizar una tabla hash con Invoke-RestMethod para pasar los datos de formulario.

Datos JSON

Puede pasar datos JSON a un endpoint y se enlazarán automáticamente a un bloque param.

Después puede enviar datos JSON al endpoint.

Bloque param

Puede utilizar un bloque param dentro de su script para exigir parámetros obligatorios y proporcionar valores predeterminados para parámetros opcionales, como los parámetros de cadena de consulta. Variables como $Body, $Headers y $User se proporcionan automáticamente.

En el ejemplo siguiente, el parámetro $Name es obligatorio y el parámetro $Role tiene un valor predeterminado de Default.

Cuando utilice el bloque param con parámetros de ruta como en el ejemplo anterior, debe incluir la variable de ruta en su parámetro. Si no se especifica, no tendrá acceso a ese valor.

Por ejemplo, la siguiente variable $Name siempre es $null. El endpoint siempre devuelve false.

Si utiliza el atributo CmdletBinding o Parameter dentro de su bloque param, el endpoint aplicará estrictamente qué parámetros se permiten en el endpoint.

Por ejemplo, lo siguiente exige que se especifique el parámetro name.

Dicho esto, no puede especificar parámetros adicionales al endpoint. Hacer lo siguiente provocará un error.

Si cambia su endpoint para evitar utilizar el atributo Parameter, puede pasar cualquier número de parámetros y se enlazarán como variables y no como parámetros del endpoint.

Conjuntos de parámetros de método

Puede definir conjuntos de parámetros utilizando parámetros de método. De forma predeterminada, PowerShell Universal inspeccionará el bloque param para determinar si se especifican los nombres de método HTTP Get, Put, Post, Delete u otros, y los incluirá automáticamente. Cuando los endpoints aceptan varios métodos, puede que no sea capaz de determinar qué conjunto de parámetros llamar en función de los datos proporcionados. En el ejemplo siguiente, tanto Get como Post aceptan el parámetro name. Además, no hay forma de llamar a Post sin un name, por lo que la validación podría fallar.

Para solucionar esto, incluya parámetros Post y Get que formen parte de sus respectivos conjuntos de parámetros. PowerShell Universal incluirá este parámetro para garantizar que se llame al conjunto de parámetros adecuado.

Devolución de datos

Se asume que los datos devueltos por los endpoints son datos JSON. Si devuelve un objeto desde el bloque de script del endpoint, se serializa automáticamente a JSON. Si desea devolver otro tipo de datos, puede devolver una cadena con el formato que elija.

Procesamiento de ficheros

Subida de ficheros

Puede procesar los ficheros subidos utilizando el parámetro $Data para acceder a la matriz de bytes de los datos subidos al endpoint.

También puede guardar el fichero en un directorio.

Descarga de ficheros

Puede enviar ficheros utilizando el cmdlet New-PSUApiResponse.

Devolución de respuestas personalizadas

Puede devolver respuestas personalizadas desde los endpoints utilizando el cmdlet New-PSUApiResponse en su endpoint. Este cmdlet le permite establecer el código de estado, el tipo de contenido e incluso especificar los datos byte[] del contenido que se va a devolver.

También puede devolver datos de cuerpo personalizados con el parámetro -Body de New-PSUApiResponse.

Al invocar el método REST se devuelve el código de error personalizado.

Puede controlar el tipo de contenido de los datos devueltos con el parámetro -ContentType.

Puede controlar las cabeceras de respuesta con una tabla hash de valores que pase al parámetro -Headers.

Runspaces persistentes

Los runspaces persistentes le permiten mantener el estado del runspace entre llamadas a la API. Esto es importante para los usuarios que realizan algún tipo de inicialización dentro de sus endpoints y que no desean ejecutarla en llamadas posteriores a la API.

De forma predeterminada, los runspaces se restablecen después de cada ejecución. Esto elimina las variables, módulos y funciones definidos durante la ejecución de la API.

Para habilitar los runspaces persistentes, deberá configurar un entorno para su API. Establezca el parámetro -PersistentRunspace para habilitar esta función. Esto se configura en el script environments.ps1.

Después puede asignar el entorno de la API en el script settings.ps1.

Tiempo de espera

De forma predeterminada, los endpoints no agotan el tiempo de espera. Para establecer un tiempo de espera para sus endpoints, puede utilizar el parámetro -Timeout de New-PSUEndpoint. El tiempo de espera se establece en número de segundos.

Contenido de endpoint externo

Puede definir la ruta a un fichero de contenido de endpoint externo con el parámetro -Path de New-PSUEndpoint. La ruta es relativa al directorio .universal del repositorio.

El contenido del fichero endpoints.ps1 es entonces este:

API de C#

Las API de C# se habilitan como un plugin.

No existe una interfaz de usuario para crear una API de C#, por lo que debe hacerlo mediante ficheros de configuración. Primero, cree un fichero .cs que ejecute su API.

Tendrá acceso a un parámetro request que incluye todos los datos sobre la solicitud de la API.

También tendrá acceso a una propiedad ServiceProvider que le permite acceder a los servicios dentro de PowerShell Universal. Actualmente no están bien documentados, pero a continuación se muestra un ejemplo de reinicio de un dashboard.

Otros servicios útiles son:

  • IDatabase

  • IApiService

  • IConfigurationService

  • IJobService

Puede optar por devolver un ApiResponse desde su endpoint.

Una vez que haya definido su fichero de endpoint de C#, puede añadirlo editando endpoints.ps1.

El servicio PowerShell Universal compila y ejecuta automáticamente los endpoints de C#.

API

Véase también

Última actualización

¿Te fue útil?