開發者
把一本書標成讀過, 就是一個 API 操作。
人在
寫入
一個寫入請求, 逐行看
PUT /v1/works/{id}/reader-status
Authorization: Bearer …
Idempotency-Key: 7f3c2a9e-read
Content-Type: application/json
{
"actingSubject":
"https://rezics.com/id/…",
"expectedVersion": 3,
"status": "read",
"finishedOn": "2026-10-19"
}路徑指向
一部 作品 {id}REZICS 裡每樣東西都有一個以 https://rezics.com/id/ 開頭的固定識別碼,換語言、換站點都是同一個。
寫明身分
actingSubject一個帳號可以代表自己,也可以代表組織。每次寫入都要寫明以誰的身分行動,伺服器在執行前檢查這個身分的權限。
讓重送
安全 Idempotency-Key每次寫入帶一把冪等鍵。逾時或斷線之後,用同一把鍵重送,不會多寫一次。
防止
覆蓋 expectedVersion你讀到第 3 版,就寫明第 3 版。別人在這之間先改了,這次寫入不會蓋過去。
錯誤是
問題 詳情 application/problem+json失敗時,code 是固定的代碼,程式依它分支,不必比對訊息文字。
重送
重送同一個請求, 拿回同一個結果。
同一把
第一次
200 { "status": "read", "version": 4, "replayed": false }重送
200 { "status": "read", "version": 4, "replayed": true }版本過期
409 { "status": 409, "code": "stale_reader_status" }
型別
API 和型別, 來自同一份定義
REZICS 的
OpenAPI 3.1
main().v1
.works({ id: uuid(work) })
['reader-status'].put({
actingSubject,
expectedVersion,
status: 'read',
...dates,
}, headers())generated/openapi/main/public.json
讀取
讀取也有規矩
nextCursor · snapshot長清單附上下一頁的游標,一頁接一頁讀到底。匯出藏書庫另附快照,資料在中途改變時會明說,不會交給你拼湊的檔案。
count.precision搜尋結果的總數會寫明是精確值,還是「至少這麼多」。
title.language · basis標題附語言標籤與書寫方向,並說明這個語言是你要求的、同一種文字的、其他文字的,還是備用的。
404 resource_unavailable你無權看見的資源,回應和不存在的資源一樣,不會透露它存在。