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 включает следующие этапы:
- Инициализация — приложение вызывает функцию инициализации (например,
SQLAllocHandleв ODBC), чтобы выделить ресурсы для подключения к СУБД. - Подключение — приложение устанавливает соединение с СУБД, передавая параметры подключения (имя сервера, базы данных, учётные данные).
- Выполнение запроса — приложение подготавливает SQL-запрос (например,
SQLPrepare) и выполняет его (например,SQLExecute). В случае параметризованных запросов значения параметров передаются отдельно. - Обработка результатов — приложение получает результаты выполнения запроса (наборы строк) через функции извлечения данных (например,
SQLFetchиSQLGetData). - Завершение — приложение освобождает ресурсы, закрывает соединение и завершает работу с 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 →