En Kinsta, ayudamos a dar soporte a miles de sitios web de todos los tamaños. Una cosa que los une a todos es la necesidad de una base de datos. Independientemente del tamaño de tu sitio, su base de datos contiene su información. Por eso te permitimos crear y gestionar bases de datos mediante la API de Kinsta.
Aunque puedes gestionar tus bases de datos utilizando el panel MyKinsta, la API de Kinsta te ofrece una mayor flexibilidad si necesitas un enfoque programático. Te permite crear, actualizar y eliminar esas bases de datos y leerlas hasta cierto punto. Sin embargo, la gran ventaja es integrar la API Kinsta — y, por extensión, tu base de datos — con tus herramientas y flujos de trabajo existentes.
Este post te mostrará cómo crear y gestionar bases de datos utilizando la API de Kinsta. También tratará sus ventajas, cómo acceder a los endpoints y cómo encajará este enfoque en tu flujo de trabajo general. Empecemos por esas ventajas y funcionalidades.
Comprender las funcionalidades de la API de Kinsta
La API de Kinsta es la forma programática de interactuar con tu servidor de Kinsta. Ofrecemos muchos endpoints para abarcar diversas formas de gestionar tus sitios, como trabajar con tus entornos, temas y plugins de WordPress, métricas de aplicaciones y mucho más.
Esto también se extiende a tus bases de datos a través de la típica arquitectura CRUD:
- Utilizando un único endpoint, puedes crear una nueva base de datos para tu sitio, elegir una ubicación de servidor y establecer credenciales.
- Hay un método para obtener todas las bases de datos de tu servidor utilizando el ID de la empresa. A partir de ahí, puedes obtener una base de datos específica y sus detalles utilizando su ID individual.
- La API te permite modificar el tamaño y el nombre para mostrar de tu base de datos. Esto puede ser útil en algunas aplicaciones de escalado de recursos.
- Puedes eliminar una base de datos cuando ya no la necesites. Esto es sencillo y conlleva un único comando.
En general, puedes aprovechar estos endpoints y empezar a agilizar todo tu flujo de trabajo de gestión de bases de datos. Más adelante exploraremos esto con más detalle. En primer lugar, hablemos de por qué deberías utilizar la API de Kinsta para gestionar tus bases de datos.
Las ventajas de gestionar bases de datos a través de la de la API de Kinsta
Por supuesto, no proporcionaríamos una API dedicada para gestionar tus bases de datos sin que te diera unas cuantas ventajas convincentes sobre el panel de MyKinsta. Ambas pueden encajar en tu flujo de trabajo, aunque la API de Kinsta tiene algunas formas específicas de desbloquear nuevas posibilidades.
1. Puedes agilizar tus procesos de gestión actuales
Una de las principales ventajas de gestionar tus bases de datos a través de la API de Kinsta es que puedes reducir los pasos que darías normalmente. Utilizando el panel MyKinsta, ya tienes un flujo de trabajo eficiente. Por ejemplo, cada sitio web de WordPress te da acceso a la base de datos de tu sitio a través de phpMyAdmin:
Esto te proporciona una interfaz familiar para realizar cambios. Para las aplicaciones, la pantalla Bases de datos en MyKinsta será tu punto de referencia:
Sin embargo, puedes saltarte todos estos pasos utilizando nuestros endpoints de la API. Esto debería ser muy fácil de incorporar si ejecutas otros servicios programáticos para tu sitio. El tiempo que ahorres automatizando este flujo de trabajo también podría repercutir positivamente en tu eficiencia.
2. Tienes a tu disposición posibilidades de automatización casi ilimitadas
Como con todos los endpoints de la API de Kinsta, puedes automatizar tareas que, de otro modo, necesitarían que accedieras al panel de MyKinsta. Hablaremos más sobre las oportunidades de integración más adelante. En resumen, si ya ejecutas herramientas y scripts existentes, automatizar la gestión de tu base de datos puede formar parte de ese proceso.
Por ejemplo, tal vez quieras incorporar la posibilidad de crear una nueva base de datos cada vez que crees un nuevo sitio. Podrías establecer criterios predefinidos dentro de tu código, herramientas y scripts para eliminar bases de datos de forma automática. Cualquier flujo de trabajo que incorpore el escalado de tus recursos también se podría beneficiar de ello, dado que puedes actualizar el tipo de recurso de una base de datos.
Al igual que con la racionalización enfocada, automatizar tu flujo de trabajo repercutirá aún más en el tiempo (y el dinero) que dedicas a la gestión de bases de datos.
3. Integración potencial con otras herramientas y plataformas
Las APIs, en general, ofrecen una forma excelente de integrarse con casi todas las demás herramientas y plataformas disponibles, incluso cuando no existe una API. Puedes utilizar servicios como Zapier o If This Then That (IFTTT) para conectar herramientas entre sí, de las que tu servidor Kinsta podría formar parte.
De hecho, muchas configuraciones requieren que tires de otros servicios para que la experiencia sea fluida. Piensa en tus canalizaciones de integración y despliegue continuos (CI/CD) que utilizan TeamCity, Travis CI o Buddy. La API de Kinsta, como parte de tu cadena de herramientas, puede ayudarte a crear un flujo de trabajo cohesivo desde el desarrollo hasta la producción.
En las próximas secciones, trataremos los diferentes métodos y solicitudes que te ofrece la API de Kinsta. Al final del post, aprenderás a utilizar la información que obtengas en algunos supuestos de ejemplo.
Qué necesitas para gestionar tus bases de datos con la API de Kinsta
Utilizar el endpoint databases
es un proceso sencillo, como utilizar cualquier otro endpoint de la API Kinsta. No vamos a profundizar aquí en todos los matices de cada acción o flujo de trabajo, aunque más adelante hablaremos más de ello.
Para acceder al endpoint databases
necesitarás tener a mano cierta información, para lo cual es fundamental un token de API válido. Generarlo te permitirá acceder a la API, lo que es válido para todos los endpoints. De hecho, tenemos un endpoint de autenticación para este propósito.
Puedes crear una clave API en la pantalla Configuración de la empresa > Claves API a través del panel de control de MyKinsta.
Para acceder a la mayoría de los endpoints, también necesitarás el ID de tu Empresa. Esto es esencialmente el ID del servidor, y puedes encontrarlo en la barra de herramientas de tu navegador cuando accedas al panel de MyKinsta:
El flujo de trabajo habitual al utilizar cualquier endpoint de la API Kinsta es validar tu clave de API, obtener los datos asociados al ID de la empresa, obtener los datos asociados al ID del sitio y procesar esos datos. Este último paso requiere que proporciones los parámetros adecuados para la solicitud.
Por supuesto, esto variará en función de lo que quieras conseguir. A medida que vayamos gestionando tus bases de datos, iremos cubriendo esos parámetros.
Crear una nueva base de datos utilizando la API de Kinsta
Crear tu base de datos requiere la mayor parte del trabajo de todas las solicitudes que trataremos aquí, pero aún así es una acción muy sencilla. Hacerlo implica enviar una solicitud a POST
, y hay ocho atributos necesarios para que esa solicitud sea válida. Entre ellos están la ubicación del servidor, el tipo de recurso, el tipo de base de datos y las credenciales de la base de datos.
Con estos parámetros en su lugar, puedes proceder a validar tu clave API y crear tu base de datos:
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 recibirás los datos solicitados en formato JSON:
{
"database": {
"id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1"
}
}
Ten en cuenta que si la solicitud falla, verás esa información en el JSON devuelto:
{
"message": "No or invalid API key provided to the request",
"status": 401,
"data": null
}
Como con cada solicitud que hagas, debes procurar mantener seguros los datos que envías y recibes. Validar tu clave API es una forma de hacerlo, pero hay otros factores importantes:
- No «codifiques» información en tus peticiones, como IDs o tu clave API. En su lugar, utiliza variables de entorno para prácticamente «anonimizar» tu código.
- Comprueba periódicamente si hay actualizaciones de la API de Kinsta, ya que los detalles del endpoint pueden cambiar o podrían estar disponibles métodos más modernos de protección de datos.
- Depurar tus peticiones a la API puede ser algo a lo que dediques mucho tiempo, especialmente en el caso de integraciones complejas. Aquí es donde resultarán útiles los códigos de respuesta devueltos por tu solicitud, tus registros de errores de Kinsta y las herramientas y técnicas de depuración habituales.
La buena noticia es que gran parte de esta información puede transferirse a otras acciones relacionadas con el endpoint databases
. En la siguiente sección veremos cómo eliminarlas.
Recuperar y borrar bases de datos existentes
Tanto recuperar como eliminar tus bases de datos lleva unos segundos y reutiliza gran parte del mismo código que ya implementaste al crear esas bases de datos. La petición GET
simplemente necesita que especifiques el método dentro de tu 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();
Esto devolverá una lista de información relativa a tus bases de datos que incluye detalles sobre tus límites de CPU y memoria, el nombre de host interno y el puerto, y mucho más:
{
"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"
}
}
Eliminar una base de datos es igual de sencillo. Envías el método DELETE
y el ID al endpoint databases
:
…
const resp = await fetch(
`https://api.kinsta.com/v2/databases/${id}`,
{
method: 'DELETE',
headers: {
…
Sin embargo, a diferencia de lo que ocurre con el panel de MyKinsta, debes tener cuidado al eliminar bases de datos con la API. Aquí, no recibirás ningún mensaje de confirmación o ‘buffer’ Por ello, es posible que quieras incorporar algún tipo de gestión de errores o comprobaciones para asegurarte de que realmente quieres eliminar la base de datos para siempre.
Cómo te ayuda la API de Kinsta a actualizar bases de datos
Dejamos para el final las actualizaciones de bases de datos porque, aunque a primera vista parecen sencillas y limitadas, esta solicitud también puede ofrecer algunas oportunidades únicas.
A primera vista, las actualizaciones ofrecen pocas posibilidades de cambio. Los únicos parámetros que se pueden modificar son el nombre de la base de datos y su tipo de recurso:
{
"resource_type": "db1",
"display_name": "test-db"
}
Aquí es donde las actualizaciones de bases de datos pueden encajar bien en todo tu flujo de trabajo de desarrollo o gestión de sistemas. Por ejemplo, la base de datos podría ser una que se mueve entre estados y entornos. En distintos momentos, podrías llevar a cabo una actualización que cambie el nombre de la base de datos en función de las convenciones del proyecto, el estado de un sprint o, esencialmente, lo que desees.
El tipo de recurso es una forma sencilla de cambiar el tamaño y el rendimiento de tu base de datos sobre la marcha. Esto te permite adaptar esa base de datos a las variables cambiantes del proyecto o incluso a la demanda pública de tu sitio. Hablemos más de esto a continuación.
La importancia de resource_type en el escalado vertical
La escalabilidad es un elemento vital de un sitio web moderno, y no debería ser diferente para el tuyo. Por ello, la API de Kinsta ofrece el parámetro resource_type. Cuando se trata de escalado vertical, éste podría ser lo más importante de tu estrategia. Lo mejor de todo es que basta una línea para cambiar los recursos de tu base de datos y asignar más o 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();
Tienes ocho tipos diferentes entre los que elegir, y en general, cuanto mayor sea el número, mayores serán los recursos que asignes — así que db8
te dará más que db1
.
Esto puede proporcionarte una forma superrápida de ampliar o reducir, en función de tus necesidades actuales.
Por ejemplo, si experimentas más tráfico o tienes que realizar tareas de base de datos más intensivas, puedes aumentar tus recursos a un nivel superior.
Integración con otros endpoints de la API de Kinsta
Por extensión, puedes utilizar el endpoint database junto con otros endpoints de la API Kinsta para construir un sistema de gestión de bases de datos con todas las funciones o incorporar esa gestión a tus otros flujos de trabajo.
Un gran enfoque es la oportunidad de escalado vertical de la última sección. Sin embargo, hay muchas más en función de las necesidades de tu sitio:
- Podrías crear una base de datos al mismo tiempo que creas una nueva aplicación. Esto puede incluir toda la información relevante, como la ubicación del servidor y las credenciales.
- Como parte del proceso de despliegue, podrías actualizar el tipo de recurso de la base de datos en función de la carga que esperas recibir.
- Solicitar tus archivos de registro y las métricas del sitio puede significar que tienes una forma de crear un método automatizado y programático de escalar los recursos de la base de datos de tu sitio sin tu intervención completa.
Esto trae a colación un elemento crucial del flujo de trabajo de gestión de tu base de datos, que es utilizar la información que solicitas en todo momento. Exploremos esto en la penúltima sección.
Utilizar la información de la base de datos de la API de Kinsta en tu flujo de trabajo
Muchos proyectos constarán de varias fases, como el desarrollo inicial, staging, las pruebas y la producción. La disponibilidad dentro de la API de Kinsta puede ayudarte a manejar muchas tareas en asociación con tus otras herramientas. Crear y gestionar bases de datos puede ser un engranaje integral en esta rueda.
Por ejemplo, cuando creas una nueva rama de características en el sistema de control de versiones (VCS, version control system) que elijas, podrías desencadenar un proceso de creación de una nueva base de datos utilizando la API de Kinsta.
Aquí tienes un ejemplo simplificado de cómo puedes activar la creación de una base de datos utilizando la 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);
Aquí tienes un ejemplo típico de uso múltiple en el que definimos una función para crear una base de datos que realiza una solicitud POST
al endpoint databases
. Nuestro ejemplo de uso muestra el proceso: una variable contiene la ruta de la rama de la función Git, que luego utilizamos como parámetro para el databaseName
. A partir de ahí, podemos desencadenar el proceso de creación basándonos en el nombre dinámico de la base de datos.
Con este enfoque para automatizar la creación de bases de datos, puedes asegurarte de que las etapas o las características tengan una base de datos dedicada. Esto puede facilitar la gestión del flujo de trabajo de desarrollo, darte una base más limpia desde la que trabajar y reducir el riesgo de conflictos.
Integrar la información de la base de datos en herramientas de colaboración
Otro caso de uso común y valioso para gestionar tus bases de datos con la API de Kinsta es proporcionar actualizaciones de estado a tus herramientas de colaboración, como Slack o Microsoft Teams. Por ejemplo, podrías gestionar un canal independiente que sólo publique estados de la base de datos.
De este modo, puedes mantener a tu equipo informado sobre el estado y la disponibilidad de las bases de datos. Esto no sólo fomenta una mejor comunicación y colaboración, sino que también puede aumentar tu proactividad ante errores y problemas.
Este tipo de integración tiene muchas otras ventajas:
- Aumenta la visibilidad. Puedes informar a todo el mundo sobre el estado de tus bases de datos. Esto garantiza que todo el mundo esté al tanto de cualquier problema potencial o de las próximas actividades de mantenimiento.
- Mejora la capacidad de respuesta. También puedes notificar a los miembros pertinentes del equipo cuando una base de datos requiera atención. Este es el catalizador directo de ser proactivo, del que ya hemos hablado.
- Facilitar el debate. La plataforma centralizada te permite a ti y a tu equipo debatir temas relacionados con la base de datos en cuestión. Este esfuerzo de colaboración puede impulsar la resolución de problemas, el intercambio de conocimientos y mucho más.
- Agiliza la comunicación. El flujo automatizado de mensajes significa que eliminas la necesidad de notificaciones y actualizaciones manuales.
Vincular la API de Kinsta con un endpoint de autenticación de herramientas parece complejo sobre el papel, pero en la práctica, no se necesita mucho:
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();
En este fragmento de código, definimos una función que utiliza un webhook de Slack para enviar mensajes a un canal de Slack. A continuación, ejecutamos una petición GET
para recuperar una lista de bases de datos asociadas a nuestro servidor. Para aquellas bases de datos que no tengan el estado «lista», enviamos una notificación al canal de Slack.
Éstas son sólo dos formas rápidas de integrar la API de Kinsta con otras plataformas para gestionar tus bases de datos. En cualquier caso, puedes obtener mejores resultados en tus proyectos y una mayor eficiencia mientras desarrollas un mejor servicio integral.
Resumen
La gestión de tus bases de datos es un aspecto tan vital de la ejecución de un proyecto o aplicación de WordPress que te proporcionamos el endpoint databases dentro de la API de Kinsta. Puedes utilizarlo para agilizar tu proceso de gestión de bases de datos y automatizar tareas específicas para las que, de otro modo, necesitarías el panel MyKinsta.
Aunque los métodos para realizar estas tareas son sencillos, tienes mucho control a tu alcance. Por ejemplo, puedes simplemente aprovisionar o eliminar nuevas bases de datos si lo deseas. Hay muchas formas creativas de utilizar estas solicitudes, como el escalado de recursos, el «mantenimiento» general de la base de datos y mucho más.
Nos encantaría conocer tu opinión sobre la creación y gestión de bases de datos mediante la API de Kinsta. Comparte tus experiencias y puntos de vista en la sección de comentarios más abajo
Deja una respuesta