Розповідаємо про інструмент, який дозволяє налаштувати API для роботи із запитами PostgreSQL. Говоримо про можливості, критику і альтернативні рішення.
Що таке PostgREST
Це - веб-сервер з відкритим вихідним кодом для роботи з базою даних PostgreSQL по API. За словами авторів, рішення являє собою альтернативу ручному CRUD -програмуванню. З його допомогою не потрібно писати бізнес-логіку, що ускладнює структуру БД, і працювати з ORM mapping, який призводить до появи повільного імперативного коду.
PostgREST написаний на Haskell, поширюється по вільній ліцензії і має велике співтовариство - підтримку продукту можна отримати в gitter-чаті . Сьогодні веб-сервер активно використовують в продакшені такі проекти, як аналітичний інструмент від Oracle - Moat, e-commerce платформа iAdvize і система для формування графіків по URL Image-charts. Також для PostgREST розроблені розширення під OAuth, websocket і nginx .
Трохи про можливості
Система здатна обробляти запити до всіх представлень і таблиць схеми БД. Наприклад, ось команда для отримання даних з таблиці people:
GET / people HTTP / 1.1
Крім GET, серед ключових слів можна виділити: OPTIONS, POST, PATCH і DELETE. Всі вони враховують права доступу при роботі з даними. Запит до таблиці, для звернення до якої у користувача недостатньо повноважень, буде відхилений. В офіційній документації є відповідний приклад. БД отримує API-запит на додавання нового завдання в таблицю todo:
curl http: // localhost: 3000 / todos -X POST \
-H "Content-Type: application / json" \
-d '{ "task": "do bad thing"}'
У відповідь PostgREST генерує відмову:
{
"Hint": null,
"Details": null,
"Code": "42501",
"Message": "permission denied for relation todos"
}
Веб-сервер також підтримує збережені процедури на PL / pgSQL , PL / Python або PLV8. Готові процедури можна викликати за допомогою POST / rpc / procedure_name (при передачі іменованих параметрів) або GET / rpc / procedure_name (при роботі з GET -параметр).
Що про інструмент думає спільнота
Генеральний директор компанії, яка розробляє програмне забезпечення для туристичних агентств, каже, що система PostgREST легка і невимоглива до ресурсів. За його словами, при роботі з шістьма інстансами витрата пам'яті рідко перевищує 70 Мбайт, в той час як для зв'язки Node.js / Waterline ця цифра зростає до одного гігабайта. Аналогічну точку зору висловив резидент Hacker News і зазначив, що PostgREST - це перший інструмент на Haskell, який він розгорнув в продакшн.
Але є в ком'юніті і ті, хто критикує PostgREST. Один з користувачів зауважив, що код на Haskell складно читати, тому налагодження подібних бібліотек в продакшн-середовищі може викликати певні труднощі. При цьому інструмент, по суті, передає завдання по обробці бізнес-логіки від бекенду базі даних - так було більше десяти років тому. У зв'язку з цим існує думка, що замість PostgREST краще писати обмеження (constraints) на звичайному SQL.
Інший користувач з HN каже, що веб-сервер придатний лише для розгортання тимчасових додатків. У довгостроковій перспективі можуть виникнути складності зі структурою бази даних - схема БД стає API-схемою, а для неї потрібно будувати окреме відображення.
Які є аналоги
PostgREST не єдиний веб-сервер, який дозволяє працювати з базами даних по API. Наприклад, є Hasura - легкий GraphQL-сервер, який грає роль посередника між веб-додатком і PostgreSQL. Система згенерує GraphQL-схему на основі існуючої БД або створить нову. Також вона вміє працювати з GraphQL Subscriptions, здійснює динамічний контроль прав доступу і генерацію запитів на об'єднання таблиць.
Сьогодні Hasura використовують багато компаній - в тому числі зі списку Fortune 500. І у системи є інтеграції з хмарними платформами найбільших західних IaaS-провайдерів.
Ще можна відзначити Prisma - сервіс теж покликаний замінити традиційні ORM. Але на відміну від PostgREST і Hasura рішення працює відразу з декількома базами даних - PostgreSQL, MySQL і MongoDB. В результаті користувачі отримують гнучкий інструмент для роботи, однак це позначається на його функціональності. Наприклад, в Prisma можна впорядкувати за двома ключам. Але з огляду на те, що інструмент активно підтримується (у нього більше 16 тис. зірок на GitHub), його можливості будуть розширені в майбутньому.
0 комментариев
Добавить комментарий