INTEGRITY Документация

Turso

Turso представляет собой распределённую базу данных, размещённую на edge-серверах и основанную на libSQL, форк SQLite с открытым исходным кодом. Turso был разработан для минимизации задержки запросов в приложениях, где запросы могут поступать из любой точки мира.

Настройка интеграции с Turso

Чтобы настроить интеграцию с Turso:

  1. Для создания и наполнения базы данных понадобится Turso CLI. Установите Turso CLI, выполнив в терминале одну из следующих двух команд:

    # On macOS and linux with homebrew
    brew install tursodatabase/tap/turso
    
    # Manual scripted installation
    curl -sSfL https://get.tur.so/install.sh | bash

    Затем выполните следующую команду, чтобы убедиться в том, что Turso CLI установлен:

    turso --version
  2. Прежде чем создать первую базу данных Turso, необходимо авторизоваться с помощью учётной записи GitHub, выполнив команду:

    turso auth login
    Waiting for authentication...
    ✔  Success! Logged in as <YOUR_GITHUB_USERNAME>

    После аутентификации вы можете создать базу данных с помощью команды turso db create <DATABASE_NAME>. Turso создаст базу данных и автоматически выберет ближайшее к вам местоположение.

    turso db create my-db
    
    # Example:
    Creating database my-db in Amsterdam, Netherlands (ams)
    
    # Once succeeded:
    Created database my-db in Amsterdam, Netherlands (ams) in 13 seconds.

    После создания первой базы данных к ней можно подключиться напрямую и выполнять SQL-запросы.

    turso db shell my-db
  3. Скопируйте следующий SQL-запрос в только что открытую оболочку:

    CREATE TABLE elements (
      id INTEGER NOT NULL,
      elementName TEXT NOT NULL,
      atomicNumber INTEGER NOT NULL,
      symbol TEXT NOT NULL
    );
    
    INSERT INTO elements (id, elementName, atomicNumber, symbol)
    VALUES (1, 'Hydrogen', 1, 'H'),
      (2, 'Helium', 2, 'He'),
      (3, 'Lithium', 3, 'Li'),
      (4, 'Beryllium', 4, 'Be'),
      (5, 'Boron', 5, 'B'),
      (6, 'Carbon', 6, 'C'),
      (7, 'Nitrogen', 7, 'N'),
      (8, 'Oxygen', 8, 'O'),
      (9, 'Fluorine', 9, 'F'),
      (10, 'Neon', 10, 'Ne');
  4. Настройте учётные данные базы данных Turso в вашем Worker:

    Добавьте URL базы данных Turso и токен аутентификации в качестве секретов вашего Worker. Сначала получите URL базы данных и создайте токен аутентификации:

    # Get your database URL
    turso db show my-db --url
    
    # Create an authentication token
    turso db tokens create my-db

    Затем добавьте их в Worker в качестве секретов с помощью Wrangler:

    # Add the database URL as a secret
    npx wrangler secret put TURSO_URL
    # When prompted, paste your database URL
    
    # Add the authentication token as a secret  
    npx wrangler secret put TURSO_AUTH_TOKEN
    # When prompted, paste your authentication token
  5. В Worker установите клиентскую библиотеку Turso:

    npm i @libsql/client
  6. Следующий пример показывает, как выполнить запрос к базе данных Turso из Worker. Учётные данные для подключения к Turso добавлены в качестве секреты в ваш Worker.

    import { Client as LibsqlClient, createClient } from "@libsql/client/web";
    
    export interface Env {
    	TURSO_URL?: string;
    	TURSO_AUTH_TOKEN?: string;
    }
    
    export default {
    	async fetch(request, env, ctx): Promise<Response> {
    		const client = buildLibsqlClient(env);
    
    		try {
    			const res = await client.execute("SELECT * FROM elements");
    			return new Response(JSON.stringify(res), {
    				status: 200,
    				headers: { "Content-Type": "application/json" },
    			});
    		} catch (error) {
    			console.error("Error executing SQL query:", error);
    			return new Response(
    				JSON.stringify({ error: "Internal Server Error" }),
    				{
    					status: 500,
    				},
    			);
    		}
    	},
    } satisfies ExportedHandler<Env>;
    
    function buildLibsqlClient(env: Env): LibsqlClient {
    	const url = env.TURSO_URL?.trim();
    	if (url === undefined) {
    		throw new Error("TURSO_URL env var is not defined");
    	}
    
    	const authToken = env.TURSO_AUTH_TOKEN?.trim();
    	if (authToken == undefined) {
    		throw new Error("TURSO_AUTH_TOKEN env var is not defined");
    	}
    
    	return createClient({ url, authToken });
    }
    • Импорт клиентской библиотеки libSQL @libsql/client/web должен импортироваться именно так, как показано, при работе с Cloudflare Workers. Импорт, предназначенный не для веб среды, не будет работать в среде Workers.
    • Env интерфейс содержит переменная окружения и secret заданный при добавлении интеграции Turso на шаге 4.
    • Env интерфейс также кеширует объект клиента libSQL и маршрутизатор, которые были созданы при первом запросе к Worker.
    • Worker использует buildLibsqlClient для запроса к elements базу данных и возвращает ответ в виде объекта JSON.

Настроив окружение и подготовив код, теперь можно протестировать Worker локально перед развертыванием.

Подробнее о Turso см. в Официальная документация Turso.