O PowerShell é um ambiente de script/linha de comando que vem com o Windows e também é disponível para Linux e no Azure.

Talvez você tenha usado Carteiro ou Violinista para fazer solicitações HTTP. Essas são ótimas, mas não são necessariamente as ferramentas certas para automação ou criação de scripts.

Você pode ter ouvido falar de enrolar antes. Trata-se de uma ferramenta de linha de comando para fazer solicitações HTTP.

Se você é um desenvolvedor de .NET/Windows (como eu), talvez não esteja familiarizado com o curl. Eu uso o PowerShell como minha linha de comando padrão todos os dias (embora ainda me considere um neófito no PowerShell). Nesta publicação, mostrarei como você pode usar a função Invoke-WebRequest para fazer solicitações HTTP (que você pode usar em scripts do PowerShell para automação).

Você pode conferir o PowerShell script que criei no GitHub. Observação: no momento em que escrevo esta postagem, estou usando o PowerShell 5.1 no Windows 10.

API REST do Couchbase

O Couchbase Server tem uma extensa API REST que você pode usar para gerenciar e administrar praticamente todos os aspectos do Couchbase Server. Para esta postagem do blog, vou me concentrar na API Full Text Search (FTS). Vou mostrar isso porque:

  • A criação de um índice FTS é algo que você desejará automatizar
  • Você provavelmente desejará compartilhar um índice FTS que criou com sua equipe e/ou verificá-lo no controle de origem
  • O Console do Couchbase já mostra exatamente como fazer isso com o curl.

Não vou abordar o FTS em detalhes: Convido-o a dar uma olhada em postagens anteriores no blog sobre FTSe este vídeo curto que demonstra a pesquisa de texto completo.

Revisão da pesquisa de texto completo

Ao criar inicialmente um índice FTS, você provavelmente usará a interface de usuário FTS integrada no Console do Couchbase. Isso é bom quando você está fazendo o desenvolvimento inicial, mas não é prático se você quiser compartilhar esse índice com a sua equipe, automatizar a implantação ou aproveitar o controle de origem.

Felizmente, você pode usar o recurso "Mostrar JSON da definição do índice" para ver os dados JSON que compõem a definição do índice. Você também pode fazer com que o Console do Couchbase gere o método curl para você.

Generate FTS curl script

Bem, se você estiver usando o curl, isso é muito conveniente. Aqui está um exemplo:

Você pode copiar/colar isso em um script e verificar o script no controle de origem. Mas e se você não usar o curl?

Versão do PowerShell: Invoke-WebRequest

Primeiro, crie um novo script do PowerShell. Eu chamei o meu de createFtsIndex.ps1. Tudo o que esse script do PowerShell fará é criar um índice FTS em um bucket existente.

Você pode começar colando o comando "curl" nesse arquivo. A maior parte desse comando é a definição JSON, que será exatamente a mesma.

Vamos analisar o restante do comando curl para ver o que está acontecendo:

  • -XPUT - Isso diz ao curl para usar o verbo PUT com a solicitação HTTP
  • -H "Content-Type: application/json" - Use um cabeçalho Content-Type.
  • http://localhost:8094/api/index/medical-condition - Esse é o URL do ponto de extremidade REST. O "localhost" varia de acordo com o local onde o Couchbase está sendo executado, e a parte "medical-condition" é apenas o nome do índice FTS.
  • -d '...json payload...' - O corpo do conteúdo que será incluído na solicitação HTTP.

O recurso Invoke-WebRequest também pode fazer tudo isso, mas a sintaxe é um pouco diferente. Vamos examinar os equivalentes:

  • -Método PUT - Isso está dizendo ao Invoke-WebRequest para usar o verbo PUT com a solicitação HTTP, portanto, você pode substituir -XPUT
  • -Header @{ ... } - Especifique os cabeçalhos a serem usados com a solicitação (mais sobre isso posteriormente)
  • -Uri http://localhost:8094/api/index/medical-condition" - Você só precisa adicionar "-Uri" na frente
  • -Body '...json payload...' - O corpo do conteúdo é incluído dessa forma, em vez de usar a função -d

Cabeçalhos

O PowerShell espera um "dicionário" que contenha cabeçalhos. A sintaxe de um dicionário literal no PowerShell é:

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

Portanto, para especificar Content-Type:

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

Uma coisa que a saída do curl fez não é a informação de autenticação que você precisa para fazer uma solicitação à API. Com o curl, você pode especificar a autenticação básica adicionando o nome de usuário/senha ao URL. Em seguida, ele o traduzirá para os cabeçalhos Basic Auth apropriados.

Com o PowerShell, parece que você precisa fazer isso sozinho. Meu Couchbase Server local tem credenciais "Administrator" e "password" (não use essas credenciais na produção). Elas precisam ser codificadas em Base64 e adicionadas aos cabeçalhos.

Então, o dicionário completo de cabeçalhos tem a seguinte aparência:

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

Você pode achar que isso é um pouco barulhento, e eu concordo. Se você conhece uma maneira mais limpa de fazer isso, estou ansioso para saber. Por favor, deixe um comentário.

Execute o script do PowerShell

Para executar o script, basta digitar .\createFtsIndex.ps1 na linha de comando do PowerShell.

Execute PowerShell script

Agora você está pronto para tornar isso parte de sua implantação.

ATUALIZAÇÃO: Um engenheiro da Couchbase, Chris Hillery, chamou minha atenção para algumas coisas que acho que vale a pena mencionar em uma atualização.

O GIF animado que mostra o comando "Show curl command" é um pouco enganador. Esse comando curl é o que você usa para substituir um índice FTS existente. Quando você cria um índice pela primeira vez, o JSON de definição do índice também é gerado para você em um painel no lado direito da tela.

JSON generated for a new index

Se estiver criando um script para implantar um índice FTS e o índice ainda não existir, você precisará usar o último. Se seu script for substituindo um índice, você precisará usar o primeiro.

Resumo

O PowerShell é uma ferramenta útil para criação de scripts e automação. Ele é usado pelo Azure, Implantação do Octopuse em qualquer lugar em que o Windows esteja sendo executado. Use o PowerShell para automatizar as chamadas à API REST do Couchbase para coisas como índices de pesquisa de texto completo, e sua equipe agradecerá.

Precisa de ajuda? Entre em contato comigo para fazer perguntas, deixando um comentário abaixo ou encontrando-me em Twitter @mgroves.

Autor

Postado por Matthew Groves

Matthew D. Groves é um cara que adora programar. Não importa se é C#, jQuery ou PHP: ele enviará solicitações de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente sênior de marketing de produtos da Couchbase. Seu tempo livre é passado com a família, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele é autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.

Deixar uma resposta