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ê.
Bem, se você estiver usando o curl, isso é muito conveniente. Aqui está um exemplo:
1 |
enrolar -XPUT -H "Content-Type: application/json" http://localhost:8094/api/index/medical-condition -d '{ ... json payload ...}' |
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.
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.
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.