Na Kinsta, oferecemos suporte a milhares de sites de todos os tamanhos. Um ponto comum entre todos eles é a necessidade de um banco de dados, que armazena as informações do site. Por isso, disponibilizamos a criação e o gerenciamento de bancos de dados por meio da API da Kinsta.

Embora você possa gerenciar seus bancos de dados usando o painel MyKinsta, a API da Kinsta oferece maior flexibilidade se você precisar de uma abordagem programática. Isso permite que você crie, atualize e exclua esses bancos de dados, e os leia até certo ponto. Todavia, a grande vantagem é integrar a API da Kinsta — e, por extensão, o seu banco de dados — com as ferramentas e os fluxos de trabalho que você já possui.

Este artigo mostrará como criar e gerenciar bancos de dados usando a API da Kinsta. Também abordará seus benefícios, como acessar os endpoints e em que essa abordagem se encaixa em seu fluxo de trabalho geral. Vamos começar com esses benefícios e recursos.

Entendendo os recursos da API da Kinsta

A API da Kinsta é a maneira programática de interagir com o seu servidor da Kinsta. Oferecemos muitos endpoints para cobrir várias maneiras de gerenciar seus sites, tais como trabalhar com seus ambientes, temas e plugins de WordPress, métricas de aplicativos e outros.

Isso também se estende aos seus bancos de dados por meio da arquitetura CRUD típica:

  • Usando um único endpoint, você pode criar um novo banco de dados para o seu site, escolher um local de servidor e definir credenciais.
  • Há um método para buscar todos os bancos de dados do seu servidor usando o ID da empresa. A partir daí, você pode buscar um banco de dados específico e seus detalhes usando seu ID individual.
  • A API permite modificar o tamanho e o nome de exibição do seu banco de dados. Isso pode ajudar em alguns aplicativos de dimensionamento de recursos.
  • Você pode remover um banco de dados quando não precisar mais dele. Isso é simples e usa um único comando.

De modo geral, você pode aproveitar esses endpoints e começar a simplificar todo o seu fluxo de trabalho de gerenciamento de banco de dados. Adiante exploraremos isso em mais detalhes. Primeiro, vamos discutir por que você deve usar a API da Kinsta para gerenciar seus bancos de dados.

Os benefícios de gerenciar bancos de dados por meio da API da Kinsta

É claro que não forneceríamos uma API dedicada para gerenciar seus bancos de dados se não oferecesse algumas vantagens atraentes em relação ao painel MyKinsta. Ambos podem se encaixar em seu fluxo de trabalho, mas a API da Kinsta possui algumas maneiras específicas de abrir novas possibilidades.

1. Você pode otimizar seus processos de gerenciamento atuais

Um dos principais benefícios de gerenciar seus bancos de dados por meio da API da Kinsta é reduzir as etapas que você normalmente seguiria. Usando o painel MyKinsta, você já tem um fluxo de trabalho eficiente. Por exemplo, cada site WordPress dá acesso ao banco de dados do seu site por meio do phpMyAdmin:

Acesso ao Banco de Dados de um site no painel MyKinsta.
Acesso ao Banco de Dados de um site no painel MyKinsta.

Isso oferece uma interface familiar para fazer alterações. Para aplicativos, a tela Bancos de Dados no MyKinsta será a sua porta de entrada:

A tela Banco de Dados no painel MyKinsta.
A tela Banco de Dados no painel MyKinsta.

No entanto, você pode pular todas essas etapas usando nossos endpoints da API. Isso será fácil de incorporar se você executa outros serviços programáticos para o seu site. O tempo que você economiza ao automatizar esse fluxo de trabalho também pode afetar positivamente sua eficiência.

2. Há possibilidades quase ilimitadas de automação disponíveis pra você

Como em todos os endpoints da API da Kinsta, você pode automatizar tarefas que, de outra forma, precisariam que você acessasse o painel MyKinsta. Falaremos mais sobre as oportunidades de integração adiante. Em resumo, se você já executa ferramentas e scripts existentes, a automação do gerenciamento do seu banco de dados pode se tornar parte desse processo.

Por exemplo, você pode querer incorporar a capacidade de criar um novo banco de dados sempre que provisionar um novo site. Pode estabelecer critérios predefinidos em seu código, ferramentas e scripts para excluir bancos de dados automaticamente. Todos os fluxos de trabalho que incorporam o dimensionamento dos seus recursos também podem se beneficiar aqui, já que você pode atualizar o tipo de recurso de um banco de dados.

Assim como a otimização focada, a automação do seu fluxo de trabalho afetará ainda mais o tempo (e o dinheiro) que você gasta no gerenciamento de bancos de dados.

3. Possibilidade de integração com outras ferramentas e plataformas

As APIs, em geral, oferecem uma excelente maneira de integração com quase todas as outras ferramentas e plataformas disponíveis, mesmo quando não há uma API existente. Você pode usar serviços como Zapier ou If This Then That (IFTTT) para conectar ferramentas, das quais seu servidor da Kinsta também pode fazer parte.

A página inicial do IFTTT.
A página inicial do IFTTT.

De fato, muitas configurações exigem que você utilize outros serviços para uma experiência suave. Considere seus pipelines de integração e implantação contínuas (CI/CD) que usam TeamCity, Travis CI ou Buddy. A API da Kinsta, como parte de sua caixa de ferramentas, pode ajudá-lo a criar um fluxo de trabalho coeso do desenvolvimento à produção.

Nas próximas seções, abordaremos os diferentes métodos e solicitações que a API da Kinsta lhe oferece. No final do artigo, você aprenderá a usar as informações obtidas em alguns cenários de exemplo.

Do que você precisa para gerenciar seus bancos de dados com a API da Kinsta

Usar o endpoint databases é um processo simples, tal como usar qualquer outro endpoint da API da Kinsta. Não vamos nos aprofundar em todas as sutilezas de cada ação ou fluxo de trabalho aqui, mas adiante discutiremos um pouco mais sobre isso.

Para acessar o endpoint databases, você precisará ter algumas informações em mãos, sendo que a principal delas é um token de API válido. Gerar esse token permitirá acessar a API, o que vale para todos os endpoints. De fato, temos um endpoint de autenticação para essa finalidade.

Você pode criar uma chave de API na tela Configurações da empresa > Chaves API no painel MyKinsta.

A tela Chaves API no painel MyKinsta.
A tela Chaves API no painel MyKinsta.

Para acessar a maioria dos endpoints, você também precisará do seu ID da Empresa. Esse é essencialmente o ID do servidor, e você pode encontrá-lo na barra de ferramentas do seu navegador quando estiver conectado ao painel MyKinsta:

O ID da Empresa de uma conta na Kinsta como parte da URL na barra de ferramentas do navegador.
O ID da Empresa de uma conta na Kinsta como parte da URL na barra de ferramentas do navegador.

O fluxo de trabalho típico ao usar qualquer endpoint da API da Kinsta é validar sua chave de API, buscar dados associados ao ID da Empresa, buscar dados associados ao ID do Site, e processar esses dados. Essa etapa final exige que você forneça os parâmetros corretos para a solicitação.

Obviamente, isso irá variar dependendo do que você deseja obter. À medida que formos gerenciando seus bancos de dados, abordaremos esses parâmetros.

Criando um novo banco de dados usando a API da Kinsta

Criar o seu banco de dados requer a maior parte do trabalho de todas as solicitações que abordamos aqui, mas ainda assim é muito fácil. Fazer isso requer o envio de uma solicitação POST, e são oito os atributos necessários para que essa solicitação seja válida. Incluem o local do servidor, o tipo de recurso, o tipo do banco de dados e as credenciais do banco de dados.

Com esses parâmetros definidos, você pode validar sua chave de API e criar o banco de dados:

import fetch from 'node-fetch';


async function run() {
  const resp = await fetch(
`https://api.kinsta.com/v2/databases`,
{
   method: 'POST',
   headers: {
     'Content-Type': 'application/json',
     Authorization: 'Bearer <YOUR_TOKEN_HERE>'
   },
   body: JSON.stringify({
     company_id: '54fb80af-576c-4fdc-ba4f-b596c83f15a1',
     location: 'us-central1',
     resource_type: 'db1',
     display_name: 'test-db',
     db_name: 'test-db',
     db_password: 'example-password',
     db_user: 'example-user',
     type: 'postgresql',
     version: '15'
   })
}
  );

  const data = await resp.json();
  console.log(data);
}

run();

Para cada endpoint, você receberá os dados solicitados no formato JSON:

{
  "database": {
"id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1"
  }
}

Observe que, se a solicitação falhar, você verá essa informação no JSON retornado:

{
  "message": "No or invalid API key provided to the request",
  "status": 401,
  "data": null
}

Como em todas as solicitações feitas, você deve procurar manter seguros os dados que envia e recebe. Validar sua chave de API é uma maneira de fazer isso, mas há outros fatores importantes aqui:

  • Não “codifique” informações em suas solicitações, como IDs ou sua chave de API. Em vez disso, use variáveis de ambiente para quase “anonimizar” seu código.
  • Verifique regularmente se há atualizações na API da Kinsta, pois os detalhes do endpoint podem mudar ou métodos mais modernos de proteção de dados podem estar disponíveis.
  • A depuração de suas solicitações de API pode ser algo em que você gasta muito tempo, especialmente em integrações complexas. É aqui que os códigos de resposta retornados da sua solicitação, os registros de erros da Kinsta e as ferramentas e técnicas típicas de depuração serão úteis.

A boa notícia é que muitas dessas informações podem ser transferidas para outras ações relacionadas ao endpoint databases. A próxima seção examinará como excluí-los.

Recuperação e exclusão de bancos de dados existentes

A busca e a exclusão de bancos de dados levam segundos e reutilizam muito do mesmo código que você já implementou ao criar esses bancos de dados. A solicitação GET precisa apenas que você especifique o método no seu código:

import fetch from 'node-fetch';

async function run() {
  const query = new URLSearchParams({
    internal: 'true',
    external: 'true'
  }).toString();

  const id = 'YOUR_id_PARAMETER';
  const resp = await fetch(
    `https://api.kinsta.com/v2/databases/${id}?${query}`,
    {
    method: 'GET',
    headers: {
      Authorization: 'Bearer <YOUR_TOKEN_HERE>'
    }
    }
  );

  const data = await resp.text();
  console.log(data);
}

run();

Isso retornará uma lista de informações relacionadas aos seus bancos de dados que inclui detalhes dos limites de CPU e memória, o nome do host interno e a porta, e muito mais:

{
  "database": {
    "id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
    "name": "unique-db-name",
    "display_name": "firstsite-db",
    "status": "ready",
    "created_at": 1668697088806,
    "memory_limit": 250,
    "cpu_limit": 250,
    "storage_size": 1000,
    "type": "postgresql",
    "version": "14",
    "cluster": {
      "id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
      "location": "europe-west3",
      "display_name": "Frankfurt, Germany Europe"
      },
    "resource_type_name": "db1",
    "internal_hostname": "some-name.dns.svc.cluster.local",
    "internal_port": "5432",
    "internal_connections": [
    {
      "id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
      "type": "appResource"
    }
    ],
    "data": {
      "db_name": "firstsite-db",
      "db_password": "password",
      "db_root_password": "password",
      "db_user": "username"
    },
    "external_connection_string": "postgresql://username:password@localhost:31866/firstsite-db",
    "external_hostname": "firstsite-db-postgresql.external.kinsta.app",
    "external_port": "31866"
  }
}

Excluir um banco de dados é igualmente simples. Você envia o método DELETE e o ID para o endpoint databases:

…
const resp = await fetch(
  `https://api.kinsta.com/v2/databases/${id}`,
  {
   method: 'DELETE',
   headers: {
…

No entanto, diferentemente do uso do painel MyKinsta, você deve ter cuidado ao excluir bancos de dados com a API. Aqui você não receberá nenhuma mensagem de confirmação ou “buffer”. Assim, você também pode querer criar algum tratamento de erros ou verificações para garantir que realmente deseja excluir o banco de dados para sempre.

Como a API da Kinsta ajuda você a atualizar bancos de dados

Estamos deixando as atualizações de bancos de dados para o final porque, embora pareçam simples e limitadas na superfície, essa solicitação também pode oferecer algumas oportunidades únicas.

Superficialmente, as atualizações oferecem pouco espaço para alterações. Os únicos parâmetros disponíveis para alteração são o nome do banco de dados e seu tipo de recurso:

{
  "resource_type": "db1",
  "display_name": "test-db"
}

É aqui que as atualizações do banco de dados podem se encaixar bem em todo o seu fluxo de trabalho de desenvolvimento ou gerenciamento de sistemas. Por exemplo, o banco de dados pode ser um que se movimenta entre estados e ambientes. Em diferentes pontos, você pode realizar uma atualização que renomeie o banco de dados com base nas convenções do projeto, no status de um sprint ou, essencialmente, no que desejar.

O tipo de recurso é uma maneira simples de alterar o tamanho e o desempenho do seu banco de dados em tempo real. Isso permite que você adapte esse banco de dados às variáveis do projeto em constante mudança ou até mesmo à demanda do público pelo seu site. Vamos falar mais sobre isso a seguir.

A importância do tipo de recurso (resource_type) no dimensionamento vertical

A escalabilidade é um elemento vital de um site moderno, e com o seu não deve ser diferente. Por isso, a API da Kinsta oferece o parâmetro resource_type. Quando se trata de dimensionamento vertical, isso pode estar na vanguarda da sua estratégia. O melhor de tudo é que você só precisa de uma linha para alterar os recursos do seu banco de dados para alocar mais ou menos:

import fetch from 'node-fetch';

async function run() {
  const id = 'YOUR_id_PARAMETER';
  const resp = await fetch(
    `https://api.kinsta.com/v2/databases/${id}`,
    {
      method: 'PUT',
      headers: {
       'Content-Type': 'application/json',
       Authorization: 'Bearer <YOUR_TOKEN_HERE>'
      },
    body: JSON.stringify({
      resource_type: 'db1',
      display_name: 'test-db'
    })
  }
  );

  const data = await resp.json();
  console.log(data);
}

run();

Você tem oito tipos diferentes para escolher, e, em geral, quanto maior o número, maiores serão os recursos alocados – portanto, db8 lhe dará mais do que db1.

Isso pode proporcionar a você uma maneira muito rápida de aumentar ou diminuir a escala, dependendo das suas necessidades atuais.

Por exemplo, se você tiver mais tráfego ou precisar executar tarefas de banco de dados mais intensas, poderá aumentar seus recursos para um nível mais alto.

Integração com outros endpoints da API da Kinsta

Por extensão, você pode utilizar o endpoint databases juntamente com outros endpoints da API da Kinsta para criar um sistema de gerenciamento de banco de dados completo ou incorporar esse gerenciamento aos seus outros fluxos de trabalho.

Uma ótima abordagem é a oportunidade de dimensionamento vertical da última seção. No entanto, há muitas outras baseadas nas necessidades do seu site:

  • Você pode criar um banco de dados ao mesmo tempo que cria um novo aplicativo. Isso pode incluir todas as informações relevantes, como o local do servidor e as credenciais.
  • Como parte do processo de implantação, você pode atualizar o tipo de recurso do banco de dados com base na carga que espera receber.
  • Solicitar os arquivos de registro e as métricas do site pode significar que você tem uma maneira de criar um método automatizado e programático de dimensionar os recursos do banco de dados do seu site sem a sua participação total.

Isso traz à tona um elemento crucial do seu fluxo de trabalho de gerenciamento de banco de dados, que é o uso das informações que você solicita em todo o processo. Vamos explorar isso na penúltima seção.

Como usar as informações do banco de dados da API da Kinsta em seu fluxo de trabalho

Muitos projetos consistem em vários estágios, como desenvolvimento inicial, preparação, teste e produção. A disponibilidade da API da Kinsta pode ajudar você a lidar com muitas tarefas em associação com outras ferramentas. A criação e o gerenciamento de bancos de dados podem ser uma engrenagem integral nessa roda.

Por exemplo, ao criar um novo branch de recurso no sistema de controle de versão (VCS) de sua escolha, você pode acionar um processo de build de um novo banco de dados usando a API da Kinsta.

Aqui está um exemplo simplificado de como você pode acionar a criação de um banco de dados usando a API:

import fetch from 'node-fetch';

async function createDatabase(databaseName) {
  const apiToken = 'your_api_token';
  const companyId = 'your_company_id';

  const response = await fetch('https://api.kinsta.com/v2/databases', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${apiToken}`
    },
    body: JSON.stringify({
      company_id: companyId,
      location: 'us-central1',
      resource_type: 'db1',
      display_name: databaseName,
      db_name: databaseName,
      db_password: 'example-password',
      db_user: 'example-user',
      type: 'postgresql',
      version: '15'
    })
  });


  if (response.ok) {
    const data = await response.json();
    console.log(`Database '${databaseName}' created successfully.`);
    console.log('Database details:', data);
  } else {
    console.error(`Error creating database '${databaseName}':`, response.statusText);
  }
}


// Usage example
const featureBranchName = 'feature/new-blog-section';
const databaseName = `db_${featureBranchName}`;
createDatabase(databaseName);

Este é um exemplo típico de uso múltiplo, em que definimos uma função para criar um banco de dados que faz uma solicitação POST para o endpoint databases. Nosso exemplo de uso mostra o processo: uma variável contém o caminho do branch do recurso Git, que então usamos como parâmetro para o databaseName. A partir daí, podemos acionar o processo de build com base no nome dinâmico do banco de dados.

Com essa abordagem para automatizar a criação de bancos de dados você pode garantir que os estágios ou recursos tenham um banco de dados dedicado. Isso pode facilitar o gerenciamento do fluxo de trabalho de desenvolvimento, proporcionar a você uma base mais limpa da qual trabalhar e reduzir o risco de conflitos.

Integração de informações do banco de dados em ferramentas de colaboração

Outro caso de uso comum e valioso para gerenciar seus bancos de dados com a API da Kinsta é fornecer atualizações de status para suas ferramentas de colaboração, como Slack ou Microsoft Teams. Por exemplo, você pode executar um canal separado que publique apenas status do banco de dados.

Com isso, você pode manter sua equipe informada sobre o status e a disponibilidade dos bancos de dados. Isso não só promove uma melhor comunicação e colaboração, mas também pode aumentar a sua proatividade com relação a erros e problemas.

Há muitos outros benefícios nesse tipo de integração:

  • Aumentar a visibilidade. Você pode atualizar todos sobre o status dos seus bancos de dados. Isso garante que todos estejam cientes de possíveis problemas ou das próximas atividades de manutenção.
  • Melhorar a capacidade de resposta. Você também pode notificar os membros relevantes da equipe quando um banco de dados precisar de atenção. Esse é o catalisador direto de ser proativo, sobre o qual falamos.
  • Facilitar a discussão. A plataforma centralizada permite que você e sua equipe discutam tópicos relacionados ao banco de dados em questão. Esse esforço colaborativo pode impulsionar a solução de problemas, o compartilhamento de conhecimento e muito mais.
  • Simplificar a comunicação. O fluxo automatizado de mensagens significa eliminar a necessidade de notificações e atualizações manuais.

Vincular a API da Kinsta a um endpoint de autenticação de ferramenta parece complexo no papel, mas na prática não é preciso muito:

import fetch from 'node-fetch';
const { IncomingWebhook } = require('@slack/webhook');

// Set up the Slack webhook URL (using an environment variable)
const slackWebhookUrl = process.env.SLACK_WEBHOOK_URL;
const webhook = new IncomingWebhook(slackWebhookUrl);

async function sendSlackNotification(message) {
  try {
    await webhook.send({
    text: message
    });
    console.log('Slack notification sent successfully.');
  } catch (error) {
    console.error('Error sending Slack notification:', error);
  }
}

async function getDatabases() {
  const apiToken = process.env.KINSTA_API_TOKEN;
  const companyId = process.env.KINSTA_COMPANY_ID;

  const query = new URLSearchParams({
    company: companyId,
    limit: '10',
    offset: '3'
      }).toString();

  try {
    const response = await fetch(`https://api.kinsta.com/v2/databases?${query}`, {
      method: 'GET',
      headers: {
       'Authorization': `Bearer ${apiToken}`
      }
    });


if (response.ok) {
   const data = await response.json();
   console.log('Retrieved databases:', data);

   // Check the status of each database and send Slack notifications if necessary
   data.forEach(database => {
     if (database.status !== 'ready') {
       const message = `Database '${database.display_name}' is in status '${database.status}'. Please check.`;
       sendSlackNotification(message);
     }
   });
} else {
   console.error('Error retrieving databases:', response.statusText);
}
  } catch (error) {
    console.error('Error retrieving databases:', error);
  }
}

// Usage example

getDatabases();

Nesse snippet de código, definimos uma função que usa um webhook do Slack para enviar mensagens a um canal do Slack. Em seguida, executamos uma solicitação GET para recuperar uma lista de bancos de dados associados ao nosso servidor. Para os bancos de dados sem um status “pronto”, enviamos uma notificação ao canal do Slack.

Essas são apenas duas maneiras rápidas de integrar a API da Kinsta com outras plataformas para gerenciar seus bancos de dados. Independentemente disso, você pode navegar por melhores resultados de projetos e maior eficiência enquanto desenvolve um serviço melhor em todos os aspectos.

Resumo

Gerenciar seus bancos de dados é um aspecto tão vital da execução de um projeto ou aplicativo WordPress, que fornecemos a você o endpoint databases dentro da API da Kinsta. Você pode usar isso para simplificar seu processo de gerenciamento de banco de dados e automatizar tarefas específicas para as quais, de outra forma, precisaria do painel MyKinsta.

Embora os métodos para realizar essas tarefas sejam simples, você tem muito controle nas mãos. Por exemplo, você pode simplesmente provisionar ou excluir novos bancos de dados, se desejar. Há muitas maneiras criativas de utilizar essas solicitações, como dimensionamento de recursos, “manutenção” geral do banco de dados, e muito mais.

Gostaríamos muito de saber o que você pensa sobre a criação e o gerenciamento de bancos de dados usando a API da Kinsta. Compartilhe suas experiências e percepções na seção de comentários abaixo!

Jeremy Holcombe Kinsta

Editor de Conteúdo & Marketing na Kinsta, Desenvolvedor Web WordPress e Escritor de Conteúdo. Fora do universo WordPress, eu curto praia, golfe e filmes. Também enfrento problemas de gente alta ;).