Servidor Couchbase

Powershell con la API REST de Couchbase

PowerShell es un entorno de scripting / línea de comandos que viene con Windows y también es disponible para Linux y dentro de Azure.

Tal vez haya utilizado Cartero o Violinista para hacer peticiones HTTP. Estos son grandes, pero no necesariamente las herramientas adecuadas para la automatización o secuencias de comandos.

Es posible que haya oído hablar de rizo antes. Es una herramienta de línea de comandos para realizar peticiones HTTP.

Si eres un desarrollador .NET/Windows (como yo), quizás no estés familiarizado con curl. Yo uso PowerShell como mi línea de comandos por defecto todos los días (aunque todavía me considero un neófito de PowerShell). En este post, voy a mostrar cómo se puede utilizar PowerShell's Invoke-WebRequest para realizar peticiones HTTP (que puede utilizar dentro de scripts PowerShell para la automatización).

Puede consultar la herramienta PowerShell script que he creado en GitHub. Nota: en el momento de escribir este post, estoy usando PowerShell 5.1 en Windows 10.

API REST de Couchbase

Couchbase Server dispone de una amplia API REST que puedes usar para gestionar y administrar casi todos los aspectos de Couchbase Server. Para esta entrada de blog, me voy a centrar en la API de Búsqueda de Texto Completo (FTS). Voy a mostrar esto porque:

  • La creación de un índice FTS es algo que con el tiempo querrá automatizar
  • Probablemente querrá compartir con su equipo un índice FTS que haya creado y/o registrarlo en el control de código fuente.
  • Couchbase Console ya te muestra exactamente cómo hacerlo con curl.

Revisión de la búsqueda de texto completo

Cuando creas inicialmente un índice FTS, probablemente usarás la UI incorporada de FTS en la Consola de Couchbase. Esto está bien cuando estás haciendo el desarrollo inicial, pero no es práctico si quieres compartir este índice con tu equipo, automatizar el despliegue, o aprovechar el control de código fuente.

Afortunadamente, puedes usar la función "Mostrar JSON de definición de índice" para ver los datos JSON que componen la definición de índice. También puedes hacer que Couchbase Console genere el método curl por ti.

Generate FTS curl script

Bueno, si estás usando curl, es muy conveniente. He aquí un ejemplo:

Puedes copiar/pegar eso en un script, y comprobar el script en el control de código fuente. Pero, ¿y si no usas curl?

Versión PowerShell: Invoke-WebRequest

En primer lugar, cree un nuevo script PowerShell. Yo lo he llamado crearFtsIndex.ps1. Todo lo que este script PowerShell va a hacer es crear un índice FTS en un bucket existente.

Puedes empezar pegando el comando "curl" en este archivo. El grueso de este comando es la definición JSON, que será exactamente la misma.

Desglosemos el resto del comando curl para ver qué ocurre:

  • -XPUT - Esto le dice a curl que use el verbo PUT con la petición HTTP
  • -H "Content-Type: application/json" - Utilice una cabecera Content-Type.
  • https://localhost:8094/api/index/medical-condition - Esta es la URL del punto final REST. El "localhost" variará en función de dónde se esté ejecutando Couchbase, y la parte "medical-condition" es sólo el nombre del índice FTS.
  • -d '...json payload...' - El cuerpo del contenido que se incluirá en la petición HTTP.

de PowerShell Invoke-WebRequest también puede hacer todo esto, pero la sintaxis es un poco diferente. Veamos los equivalentes:

  • -Método PUT - Esto le dice a Invoke-WebRequest que use el verbo PUT con la petición HTTP, así que puedes reemplazar -XPUT
  • -Header @{ ... } - Especifique las cabeceras que se utilizarán con la solicitud (más información más adelante)
  • -Uri https://localhost:8094/api/index/medical-condition" - Sólo tiene que añadir "-Uri" delante
  • -Body '...json payload...' - El cuerpo del contenido se incluye de esta forma en lugar de utilizar la función de curl -d

Cabeceras

PowerShell espera un "diccionario" que contenga cabeceras. La sintaxis para un diccionario literal en PowerShell es:

@{"key1"="value1"; "key2"="value2"}

Entonces, para especificar Content-Type:

-Headers @{"Content-Type"="application/json"}

Una cosa que la salida de curl hizo no generate es la información de autenticación que necesitas para hacer una petición a la API. Con curl, puede especificar la autenticación básica añadiendo el nombre de usuario/contraseña a la URL. Luego lo traducirá en las cabeceras Basic Auth apropiadas.

Con PowerShell, parece que tienes que hacerlo tú mismo. Mi Couchbase Server local tiene credenciales "Administrator" y "password" (por favor no las uses en producción). Hay que codificarlas en Base64 y añadirlas a las cabeceras.

Entonces el diccionario completo de Cabeceras tiene este aspecto:

-Headers @{"Authorization" = "Basic "+[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("Administrator:password")); "Content-Type"="application/json"}

Puede que pienses que es un poco ruidoso, y estoy de acuerdo. Si conoces una forma más limpia de hacerlo, me muero por saberlo. Por favor, deja un comentario.

Ejecutar el script PowerShell

Para ejecutar el script, basta con escribir .\createFtsIndex.ps1 en la línea de comandos de PowerShell.

Execute PowerShell script

Ya está listo para que esto forme parte de su despliegue.

ACTUALIZACIÓN: Un ingeniero de Couchbase, Chris Hillery, me ha llamado la atención sobre un par de cosas que creo que merece la pena mencionar en una actualización.

El GIF animado que muestra "Mostrar comando curl" es un poco engañoso. Ese comando curl es el que se utiliza para sustituir un índice FTS existente. Al crear un índice por primera vez, también se genera el JSON de definición del índice en un panel a la derecha de la pantalla.

JSON generated for a new index

Si está creando un script para desplegar un índice FTS, y el índice no existe todavía, tendrá que utilizar este último. Si su script es sustitución de un índice, tendrá que utilizar el primero.

Resumen

PowerShell es una práctica herramienta de scripting y automatización. Se utiliza en Azure, Despliegue Octopusy en cualquier lugar donde se ejecute Windows. Usa PowerShell para automatizar las llamadas a la API REST de Couchbase para cosas como índices de búsqueda de texto completo, y tu equipo te lo agradecerá.

¿Necesita ayuda? Si tienes alguna pregunta, déjame un comentario a continuación o búscame en Twitter @mgroves.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Author

Posted by Matthew Groves

Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.