Skip to content
Denis Feklushkin edited this page Sep 17, 2020 · 8 revisions

Зачем это надо?

Чтобы работать с SQL БД необходим API.

Но SQL — это не API. SQL был разработан как интерфейс для конечных пользователей. (Да-да, и для 1974 года это было отличное решение — миром правили текстовые терминалы!)

Так что, когда современные прикладные программисты используют SQL-интерфейс даже в виде возможности вызова лишь несложных запросов или хранимых процедур, то:

  • Происходят ошибки при переносе запросов. Даже простой запрос можно написать неправильно (например, случайно не дописав часть условия WHERE в SELECT) - такую ошибку может быть трудно отловить. Кроме этого, некоторые ошибки являются результатом сознательного «улучшения» SQL-запроса прикладным программистом. Другими словами: поручать неSQL-программистам прикасаться к SQL-запросам в каком бы то ни было виде — плохая идея!
  • Появляются проблемы с безопасностью. Клиентские и серверные библиотеки БД — небезопасны. Возможность передавать произвольный запрос в БД — потенциальная уязвимость, так как прежде чем запрос будет выполнен он проходит несколько сложных этапов, на каждом из которых в соответствующем коде может быть допущена ошибка, создающая уязвимость. (Ошибка из предыдущего примера также может привести к проблеме с безопасностью.)
  • Сессионная природа работы с SQL-сервером плохо сочетается с современными REST-интерфейсами.
  • Проблемы с кэшированием. Чтобы организовать кэширование ответов БД придётся: провести денормализацию внутри БД и в дальнейшем поддерживать такую её структуру; или хранить кэш снаружи БД и передавать информацию об инвалидации кэша из БД с помощью флагов. И то, и другое больше смахивает на костыли и подпорки, чем на нормальную работу. (В настоящее время кэширование в pgator не реализовано)

Что же делать?

pgator предназначен для создания простого API к БД. (В данный момент поддерживаются только JSON-RPC, HTTP REST и PostgreSQL.)

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

pgator proposed by denizzzka

Clone this wiki locally