Serving API

Sintaks query

Endpoint daftar (GET /sdgs/publikasi) menerima filter, sort, dan pagination lewat query string. Setiap kolom yang disajikan dapat dipakai sebagai filter, dan setiap kolom yang bukan array sebagai sort key; daftar kolom beserta tipenya ada di halaman tabel publikasi.

?kolom=nilai              sama dengan (eq)
?kolom[op]=nilai          op: eq ne gt gte lt lte in like has null
?sort=-kolom_a,kolom_b    `-` untuk descending
?page=1&page_size=50     page_size paling banyak 200

Parameter apa pun selain nama kolom, sort, page, dan page_size ditolak. Setiap parameter hanya boleh muncul sekali: dua filter pada kolom yang sama dijawab 400.

Filter

?kolom=nilai sama dengan ?kolom[eq]=nilai. Operator yang berlaku bergantung pada tipe kolom:

TipeOperator
texteq, ne, gt, gte, lt, lte, in, like, null
integer, biginteq, ne, gt, gte, lt, lte, in, null
doubleeq, ne, gt, gte, lt, lte, in, null
date, timestampeq, ne, gt, gte, lt, lte, in, null
timestamptzeq, ne, gt, gte, lt, lte, in, null
booleaneq, ne, null
integer[], text[]has, null
  • in menerima beberapa nilai dipisah koma: ?jenis_dokumen[in]=article,preprint.
  • like hanya untuk text, tidak membedakan huruf besar dan kecil, dengan % sebagai wildcard: ?judul[like]=%energi%.
  • has hanya untuk kolom array, dan menanyakan apakah array itu memuat satu nilai: ?nomor_sdgs[has]=4 mengambil publikasi yang menyentuh SDG 4.
  • null menerima true atau false: ?doi[null]=true mengambil baris yang DOI-nya kosong.

Format nilai mengikuti tipe kolom: integer dan bigint tanpa desimal, double boleh berdesimal (0.85), boolean true atau false, date YYYY-MM-DD dan harus tanggal kalender yang sah, timestamptz YYYY-MM-DDTHH:MM:SS dengan akhiran Z atau offset (2026-01-01T00:00:00+07:00), timestamp YYYY-MM-DDTHH:MM:SS tanpa akhiran apa pun. Nilai has mengikuti tipe elemen array-nya. Nilai yang tidak sesuai dijawab 400 yang menyebutkan parameternya.

Semua filter digabung dengan AND: baris harus memenuhi setiap filter.

Sort

?sort= menerima daftar kolom dipisah koma, awalan - untuk descending. Kolom key selalu ditambahkan di akhir sebagai tie-breaker — semua kolomnya, bila key terdiri dari beberapa kolom — sehingga urutan halaman stabil di antara dua request.

?sort=-tahun,judul

Kolom yang tidak dikenal, kolom array, atau kolom yang disebut dua kali, dijawab 400.

Pagination

page dimulai dari 1; page_size default 50, paling banyak 200. Bagian page pada respons memuat total, jumlah seluruh baris yang cocok dengan filter, sehingga aplikasi tahu berapa halaman yang tersisa.

{ "page": { "page": 2, "page_size": {{PAGE_SIZE_DEFAULT}}, "total": 1853 } }

Catatan untuk curl

curl memperlakukan [ dan ] sebagai pola glob. Sertakan -g agar tanda kurung siku diteruskan apa adanya:

curl -g -H "Authorization: Bearer lh_..." \
  "https://api.ranah.durianworks.my.id/v1/sdgs/publikasi?nomor_sdgs[has]=4&judul[like]=%energi%&sort=-tahun"