4.2 KiB
4.2 KiB
База на которой основанны запросы
erDiagram
PEOPLE ||--|{ ORDERS : "id -> person_id"
PEOPLE {
int id PK
string name
int age
string status
boolean active
date created_at
}
ORDERS {
int id PK
int person_id FK
date order_date
decimal total
}
Базовый запрос
GET /people
Вернёт все доступные записи таблицы.
Фильтры и условия
GET /people?колонка=оператор.значение
Основные операторы
eq— равно?age=eq.20gt/gte— больше / больше либо равно?age=gt.18neq— не равно?age=neq.20lt/lte— меньше / меньше либо равно?age=lt.65like/ilike— шаблон (регистр учитывается / не учитывается)?name=ilike.*alex*in— входит в набор?id=in.(1,2,3)not.in— не входит в набор?id=not.in.(1,2,3)match/imatch— patern matching documentationisdistinct- !=, но можно использовать с NULL?age=neq.nullis— проверка на NULL (или true/false)?status=is.null/?active=is.true
Логические операторы (объединение)
and— несколько условий вместе?and=(status.eq.active,age.gt.18)or— логическое «или»?or=(name.eq.John,name.eq.Mike)all
Поноценный поиск по тексту
fts- по по...plfts- поиск по по текстуphfts- поиск по фразамwfts- поиск по словам
Селекторы (выбор колонок)
GET /people?select=id,name,age
Вернёт только указанные колонки.
Переименование полей
GET /people?select=person_id:id,person_name:name
Вернёт указанные колонки с указанными именами.
[
{
"person_id": null,
"person_name": null
}
]
Многоуровневый селект
Если есть связь, например people → orders (по people.id = orders.person_id), то:
GET /people?select=id,name,orders(*)
Вернёт людей вместе со всеми их заказами.
[
{
"id": null,
"name": null,
"orders": [
...
]
}
...
]
GET /people?order=id,total,person(id, name)
Вернёт заказы вместе с заказчиками.
[
{
"id": null,
"total": null,
"person": {
"id": null,
"name": null
}
}
...
]
GET /people?order=id,total,...person(name)
Вернёт заказ встроив поля заказчика на верхний уровень.
[
{
"id": null,
"total": null,
"name": null
}
...
]
Сортировка
GET /people?order=age.desc
Сортировка по колонке age в обратном порядке.
Может быть цепочка: ?order=age.desc,name.asc
Лимиты и сдвиги
GET /people?limit=10&offset=20
Вернёт 10 записей начиная с 21-й.
Агрегации
Для агрегаций есть расширенный синтаксис:
count=exactвернёт общее кол-во строк в заголовкеContent-Range.Prefer: count=exactв заголовке запроса даёт то же самое.
Пример: агрегированные поля
Пример комбинированного запроса
Вернуть людей:
- Только id, name.
- Возраст > 18.
- Отсортировать по убыванию по created_at.
- Вернуть не более 5 записей.
GET /people
?select=id,name
&age=gt.18
&order=created_at.desc
&limit=5