API

Urutkan, filter, dan cari

Satu query JSON untuk mengurutkan, memfilter, mencari, memilih field, join record terkait, dan menghitung.

Daftar record menerima parameter query opsional: objek JSON yang di-URL-encode. GraphQL menerima objek yang sama. Contoh memakai koleksi contacts dan memakai ulang base dan token dari halaman sebelumnya.

Kirim query

GET /api/v1/workspaces/:workspace/collections/:collection/records

curl --get 'http://127.0.0.1:8080/api/v1/workspaces/YOUR_WORKSPACE_ID/collections/YOUR_COLLECTION_ID/records' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  --data-urlencode 'limit=20' \
  --data-urlencode 'query={"filters":[{"field":"is_customer","operator":"eq","value":true}],"sort":[{"field":"deal_value","descending":true}],"fields":["full_name","deal_value"],"meta":["filter_count"]}'
const query = {
	filters: [{ field: 'is_customer', operator: 'eq', value: true }],
	sort: [{ field: 'deal_value', descending: true }],
	fields: ['full_name', 'deal_value'],
	meta: ['filter_count']
};
const params = new URLSearchParams({ limit: '20', query: JSON.stringify(query) });
const res = await fetch(`${base}/records?${params}`, {
	headers: { Authorization: `Bearer ${token}` }
});
const { data, meta } = await res.json();
query, _ := json.Marshal(map[string]any{
	"filters": []map[string]any{{"field": "is_customer", "operator": "eq", "value": true}},
	"sort":    []map[string]any{{"field": "deal_value", "descending": true}},
	"fields":  []string{"full_name", "deal_value"},
	"meta":    []string{"filter_count"},
})
params := url.Values{"limit": {"20"}, "query": {string(query)}}
req, _ := http.NewRequest("GET", base+"/records?"+params.Encode(), nil)
req.Header.Set("Authorization", "Bearer "+token)
res, err := http.DefaultClient.Do(req)
import json

query = {
    "filters": [{"field": "is_customer", "operator": "eq", "value": True}],
    "sort": [{"field": "deal_value", "descending": True}],
    "fields": ["full_name", "deal_value"],
    "meta": ["filter_count"],
}
res = requests.get(
    f"{base}/records",
    headers={"Authorization": f"Bearer {token}"},
    params={"limit": 20, "query": json.dumps(query)},
)

Hitungan yang kamu minta muncul di meta, di samping pagination:

{
	"pagination": { "limit": 20, "offset": 0, "count": 20, "has_more": true },
	"filter_count": 50,
	"total_count": 126
}

Opsi

OpsiFungsinya
filtersMaksimal 8 kondisi. Semuanya harus cocok. Masing-masing punya field, operator, dan value.
sortMaksimal 3 field, masing-masing dengan field dan descending. Urutannya stabil dan nilai null di akhir.
fieldsKembalikan hanya field ini. Hilangkan untuk mendapat semua field.
searchSetiap kata harus cocok dengan minimal satu field pencarian.
search_fieldsField yang dicari. Tanpa ini, semua field string dan text dicari.
joinsMaksimal 3 lookup ke koleksi lain, maksimal 8 field masing-masing.
metatotal_count menghitung semua baris, filter_count menghitung baris yang cocok. Mati kecuali diminta, agar pembacaan tetap cepat.

Operator filter

OperatorArtinyaBerlaku untuk
eqsama dengansemua tipe kecuali JSON
netidak sama dengansemua tipe kecuali JSON
gt, gtelebih besar dari, atau sama denganangka dan tanggal
lt, ltelebih kecil dari, atau sama denganangka dan tanggal
containsmengandung teksstring dan text
null, not_nullkosong, tidak kosong (tanpa value)semua tipe, termasuk JSON

Boolean hanya mendukung eq dan ne. Tanggal dibandingkan dalam UTC.

Join record terkait

Join membaca field dari record yang cocok di koleksi lain. collection adalah ID koleksi lain itu. target_field adalah field untuk mencocokkan; hilangkan untuk mencocokkan dengan id.

{
	"joins": [
		{
			"field": "company",
			"collection": "19c2b406b68223b96809deaead4b34e9",
			"target_field": "name",
			"fields": ["industry"]
		}
	]
}

Field hasil join muncul di bawah _related:

{
	"full_name": "Citra Lestari",
	"company": "FinHub",
	"_related": { "company": { "industry": "Fintech" } }
}

Jika tidak ada yang cocok, nilainya null. Join hanya membaca dan tidak membuat foreign key.

Export

Export menerima filters, sort, dan search, dan selalu mengembalikan semua field. fields dan meta ditolak di sana.

Pemecahan masalah

  • 400 invalid_input: periksa batasnya (8 filter, 3 sort, 3 join, 8 field per join), nama operator, dan tipe value.
  • Join bernilai null: nilai sumber harus sama dengan target field di koleksi lain.
  • Tidak ada hitungan di meta: tambahkan total_count atau filter_count ke meta.

Langkah berikutnya

Traktir kopi