Открыть сервис

Call-Level Interface

Call-Level Interface (CLI) — это программный интерфейс прикладного программирования (API), предназначенный для взаимодействия прикладных программ с системами управления базами данных (СУБД). CLI определяет набор функций и правил, позволяющих приложению отправлять запросы на языке SQL (Structured Query Language) и получать результаты их выполнения, не завися от конкретной реализации СУБД. Основная цель CLI — обеспечить стандартизированный способ доступа к базам данных, что упрощает разработку переносимых приложений, способных работать с различными СУБД без изменения исходного кода.

История

Разработка концепции Call-Level Interface началась в конце 1980-х годов, когда потребность в универсальном доступе к базам данных стала очевидной. До этого каждая СУБД имела собственный, часто уникальный, интерфейс, что затрудняло интеграцию и миграцию приложений. В 1992 году организация SQL Access Group (SAG) опубликовала спецификацию CLI, которая легла в основу стандарта ISO/IEC 9075-3:1995 «Информационные технологии — Языки баз данных — SQL — Часть 3: Call-Level Interface (SQL/CLI)». Этот стандарт был принят Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC) и впоследствии неоднократно обновлялся, включая версии 1999, 2003, 2008, 2011, 2016 и 2023 годов.

Параллельно с развитием стандарта SQL/CLI появились и другие реализации, основанные на тех же принципах. В 1992 году Microsoft выпустила Open Database Connectivity (ODBC), который стал одной из наиболее широко распространённых реализаций CLI. ODBC базируется на спецификациях SAG и предоставляет аналогичный набор функций, адаптированный для платформы Windows. В 1996 году консорциум Java Community Process (JCP) разработал Java Database Connectivity (JDBC) — API для языка Java, также основанный на концепции CLI. JDBC, в отличие от ODBC, является чисто Java-реализацией и не требует установки дополнительных драйверов на стороне клиента.

Архитектура и принцип работы

CLI работает на основе архитектуры «клиент-сервер», где приложение (клиент) взаимодействует с СУБД (сервером) через драйвер или библиотеку, реализующую спецификацию CLI. Основные компоненты архитектуры:

  • Приложение — программа, написанная на языке программирования (C, C++, Java, Python и др.), которая вызывает функции CLI для выполнения SQL-запросов.
  • Драйвер CLI — библиотека, реализующая функции CLI для конкретной СУБД. Драйвер отвечает за преобразование вызовов CLI в протокол, понятный СУБД, и обратную передачу результатов.
  • СУБДсистема управления базами данных, которая обрабатывает SQL-запросы и возвращает результаты.

Типичный цикл работы с CLI включает следующие этапы:

  1. Инициализация — приложение вызывает функцию инициализации (например, SQLAllocHandle в ODBC), чтобы выделить ресурсы для подключения к СУБД.
  2. Подключение — приложение устанавливает соединение с СУБД, передавая параметры подключения (имя сервера, базы данных, учётные данные).
  3. Выполнение запроса — приложение подготавливает SQL-запрос (например, SQLPrepare) и выполняет его (например, SQLExecute). В случае параметризованных запросов значения параметров передаются отдельно.
  4. Обработка результатов — приложение получает результаты выполнения запроса (наборы строк) через функции извлечения данных (например, SQLFetch и SQLGetData).
  5. Завершение — приложение освобождает ресурсы, закрывает соединение и завершает работу с CLI.

Функции и возможности

Стандарт SQL/CLI определяет набор функций, которые можно разделить на несколько категорий:

  • Управление ресурсами — функции для выделения и освобождения дескрипторов (handles) для сред, соединений, операторов и дескрипторов.
  • Управление соединениями — функции для установки, настройки и разрыва соединений с СУБД.
  • Выполнение SQL-запросов — функции для подготовки, выполнения и отмены SQL-запросов.
  • Обработка результатов — функции для извлечения данных из результирующих наборов, получения метаданных (например, типов столбцов) и навигации по строкам.
  • Управление транзакциями — функции для начала, фиксации (commit) и отката (rollback) транзакций.
  • Обработка ошибок — функции для получения информации об ошибках и предупреждениях, возникших при выполнении операций.

Реализации

Наиболее известными реализациями CLI являются:

  • ODBC (Open Database Connectivity) — разработан Microsoft, широко используется в Windows-среде. Поддерживается большинством СУБД, включая Microsoft SQL Server, Oracle Database, PostgreSQL, MySQL, SQLite. Драйверы ODBC доступны для многих языков программирования, включая C, C++, Python, PHP.
  • JDBC (Java Database Connectivity) — стандартный API для языка Java, входящий в состав Java SE (Standard Edition). JDBC предоставляет набор интерфейсов и классов, которые реализуются драйверами для конкретных СУБД. JDBC является основой для доступа к базам данных в Java-приложениях.
  • libpq — библиотека на языке C, предоставляющая CLI для СУБД PostgreSQL. libpq является низкоуровневым интерфейсом, который используется в более высокоуровневых библиотеках, таких как libpqxx (C++) и psycopg2 (Python).
  • OCI (Oracle Call Interface) — собственный интерфейс Oracle для доступа к СУБД Oracle Database. OCI предоставляет широкий набор функций, включая поддержку многопоточности, пулов соединений и расширенных типов данных.

Преимущества и недостатки

Преимущества

  • Переносимость — приложения, написанные с использованием CLI, могут работать с различными СУБД без изменения исходного кода, при условии наличия соответствующего драйвера.
  • Стандартизация — CLI основан на международных стандартах, что обеспечивает единообразие интерфейса и упрощает обучение разработчиков.
  • Производительность — CLI позволяет выполнять SQL-запросы напрямую, без дополнительных уровней абстракции, что может повысить скорость выполнения по сравнению с ORM (Object-Relational Mapping).
  • Гибкость — CLI предоставляет низкоуровневый доступ к базам данных, что позволяет разработчикам тонко настраивать выполнение запросов и управлять ресурсами.

Недостатки

  • Сложность — использование CLI требует от разработчика глубоких знаний SQL и управления ресурсами, что может увеличить время разработки.
  • Отсутствие абстракции — CLI не предоставляет объектно-ориентированных абстракций, таких как ORM, что может усложнить работу с реляционными данными в объектно-ориентированных языках.
  • Зависимость от драйверов — для каждой СУБД требуется отдельный драйвер, который может иметь свои особенности и ограничения.

Применение

CLI широко используется в различных областях разработки программного обеспечения, включая:

  • Разработка корпоративных приложений — приложения для управления данными, такие как системы учёта, CRM (Customer Relationship Management) и ERP (Enterprise Resource Planning), часто используют CLI для взаимодействия с базами данных.
  • Веб-разработка — серверные приложения на языках PHP, Python, Java и других используют CLI для выполнения SQL-запросов к базам данных.
  • Разработка инструментов администрирования — утилиты для управления базами данных, такие как pgAdmin, SQL Server Management Studio, используют CLI для выполнения операций.
  • Научные и аналитические приложения — программы для обработки больших объёмов данных, такие как системы бизнес-аналитики (BI), часто используют CLI для извлечения и обработки данных.

Сравнение с другими подходами

CLI отличается от других подходов к доступу к базам данных, таких как:

  • Встраиваемый SQL (Embedded SQL) — SQL-запросы встраиваются непосредственно в исходный код программы на языке программирования, а затем обрабатываются специальным препроцессором. В отличие от CLI, встраиваемый SQL требует компиляции и не обеспечивает такой же гибкости в динамическом формировании запросов.
  • ORM (Object-Relational Mapping) — технология, которая автоматически преобразует объекты программы в записи базы данных и обратно. ORM упрощает разработку, но может снижать производительность и скрывать детали выполнения SQL-запросов.
  • REST API — интерфейс, основанный на протоколе HTTP, который позволяет выполнять операции с базами данных через веб-запросы. REST API обычно используется для доступа к базам данных через интернет, но не обеспечивает такой же производительности и гибкости, как CLI.

Интересные факты

  • Стандарт SQL/CLI является частью более широкого семейства стандартов SQL, включающего также SQL/PSM (Persistent Stored Modules), SQL/MED (Management of External Data) и другие.
  • ODBC, одна из первых реализаций CLI, изначально разрабатывалась Microsoft и Sybase в 1992 году. Впоследствии ODBC был принят как стандарт X/Open (ныне The Open Group).
  • JDBC, хотя и основан на концепции CLI, не является прямым портом ODBC. JDBC был разработан с нуля с учётом особенностей языка Java, таких как автоматическое управление памятью и отсутствие указателей.

Источники

  • ISO/IEC 9075-3:2023 Information technology — Database languages — SQL — Part 3: Call-Level Interface (SQL/CLI)
  • Microsoft ODBC Programmer's Reference
  • Oracle Call Interface Programmer's Guide
  • PostgreSQL Documentation: libpq — C Library
  • Java Database Connectivity (JDBC) API Specification

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →