API កត់ត្រាបញ្ជីពីចម្ងាយ
ធ្វើបច្ចុប្បន្នភាពចុងក្រោយ៖ ១០ ឧសភា ២០២៦
កត់ត្រាធាតុចូលពី cURL, iOS Shortcuts ឬស្គ្រីបស្វ័យប្រវត្តិកម្មដោយប្រើ token API ផ្ទាល់ខ្លួន។ token គឺ សម្រាប់សរសេរតែប៉ុណ្ណោះ — វាអាចបញ្ចូលប្រតិបត្តិការ និងអានបញ្ជីប្រភេទ / ស្លាក ប៉ុន្តែមិនអាចអាន ឬលុបទិន្នន័យប្រតិបត្តិការណាមួយឡើយ។
1. ទទួលបាន token
ចូលជា admin បើក ការកំណត់ → 🔑 API កត់ត្រាបញ្ជីពីចម្ងាយ ហើយចុច "បង្កើត token"។
token អត្ថបទធម្មតាត្រូវបានបង្ហាញ តែម្តងគត់ — សូមចម្លងវាភ្លាមៗ។ ម៉ាស៊ីនមេរក្សាទុកតែ hash SHA-256 របស់វា ដូច្នេះ token ដែលបាត់អាចជំនួសបានតែដោយការបង្វិល (ដែលធ្វើឱ្យ token ចាស់លែងមានសុពលភាព)។
ទម្រង់ token៖ bb_<userId>_<secret>។ ផ្ញើវាជាមួយរាល់សំណើជា Authorization: Bearer <token>។
2. POST /api/ingest — បញ្ចូលប្រតិបត្តិការមួយ
body នៃសំណើគឺជា object JSON ដែលមានវាលទាំងនេះ៖
title(string, ចាំបាច់) — ឈ្មោះប្រតិបត្តិការamount(number, ចាំបាច់) — ត្រូវតែជាចំនួនវិជ្ជមានtype(string, ស្រេចចិត្ត, លំនាំដើមexpense) — មួយក្នុងចំណោមexpense/income/prepaid_expense/pending_incomecategory(string, ស្រេចចិត្ត) — ឈ្មោះប្រភេទnote(string, ស្រេចចិត្ត) — កំណត់ចំណាំសេរីcreated_at(string, ស្រេចចិត្ត) — ISO 8601; លំនាំដើមឥឡូវនេះ
curl -X POST https://billbook.me/api/ingest \
-H "Authorization: Bearer bb_<userId>_<secret>" \
-H "Content-Type: application/json" \
-d '{"title":"Coffee","amount":120,"type":"expense","category":"Food"}'
# response: 201
{ "id": "...", "created_at": "..." }3. GET /api/ingest/categories — បញ្ជីប្រភេទ
ត្រឡប់ឈ្មោះប្រភេទរបស់ admin តាមលំដាប់ម៉ឺនុយទម្លាក់ចុះនៃផ្ទាំងគ្រប់គ្រង។ ការឆ្លើយតបមានតែឈ្មោះប៉ុណ្ណោះ — គ្មាន ids, user ids ឬទិន្នន័យប្រតិបត្តិការ។
curl https://billbook.me/api/ingest/categories \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "categories": ["Food", "Rent", "..."] }4. GET /api/ingest/tags — ស្លាកដែលប្រើថ្មីៗ
ត្រឡប់បុព្វបទស្លាកដែលបានធ្វើបច្ចុប្បន្នភាពថ្មីៗបំផុត (សញ្ញា #XXX ដែលបង្កប់ក្នុងចំណងជើង)។ លំនាំដើម ២០; ប្រើ ?limit= ដើម្បីបដិសេធ (អតិបរមា ១០០)។
ត្រឡប់ array ទទេជំនួសឱ្យកំហុស ប្រសិនបើតារាង tag_prefixes មិនទាន់មាននៅឡើយ។
curl "https://billbook.me/api/ingest/tags?limit=20" \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }5. លេខកូដកំហុស
កំហុសទាំងអស់គឺជា JSON៖ { "error": "message" }។
401— ខ្វះការអនុញ្ញាត, ទម្រង់ token មិនត្រឹមត្រូវ, ត្រូវបានដកហូត ឬមិនត្រូវគ្នា402— ការជាវផុតកំណត់; ត្រូវការបន្តដើម្បីសរសេរ405— វិធីសាស្ត្រមិនគាំទ្រ (ឧ. GET លើ/api/ingest)501— ម៉ាស៊ីនមេខ្វះSUPABASE_SERVICE_ROLE_KEY500— កំហុសផ្ទៃក្នុងផ្សេងទៀត
6. សុវត្ថិភាព និងដែនកំណត់
តាមការរចនា token អាចសរសេរបានតែទៅអង្គភាពផ្ទាល់ខ្លួនរបស់វា — វាមិនអាចក្លែងបន្លំជា orgs ផ្សេង ឬអានទិន្នន័យដែលមានស្រាប់ឡើយ៖
user_idតែងតែជាម្ចាស់ token; មិនអាចក្លែងបន្លំបានorg_idតែងតែជា org របស់ម្ចាស់; ការសរសេររវាង orgs គឺមិនអាចទៅរួច- token ត្រូវបានចេញតែទៅតួនាទី admin (manager / staff ទទួលបាន 403)
- ការឆ្លើយតបមិនដែលលេចធ្លាយជួរផ្សេង — ត្រឡប់តែ
{ id, created_at } - ការដកហូតមានភ្លាមៗ; បង្វិលនៅពេលណាក៏បានពីការកំណត់
7. ឧទាហរណ៍ iOS Shortcut
បន្ថែមសកម្មភាព "Get Contents of URL", URL https://billbook.me/api/ingest, វិធីសាស្ត្រ POST, header Authorization: Bearer bb_... និង Content-Type: application/json, និង body សំណើជា JSON៖ {"title":"កាហ្វេ","amount":120,"type":"expense"}។ ភ្ជាប់ title និង amount ទៅនឹងធាតុចូល Shortcut ឬអថេរ "សួរគ្រប់ពេល"។
ឯកសារនេះគឺជាឯកសារយោងរហ័ស; កូដ backend គឺជាប្រភពនៃការពិតសម្រាប់អាកប្បកិរិយាជាក់ស្តែង។