Notion APIを使って、ページやデータベースが削除を検知する方法
直面した問題
ユーザーによるGUIの操作で削除されたことを検知できず、システムに支障が生じた。
原因
Query Databaseのlast_edited_by
でフィルタリングしてデータベースとの差分を検知していたが、削除(=GetPageResponseのarchived=true
)はeditに該当しない。
ちなみに、GetPageResponseはこんな感じ。(ChatGPTに作ってもらったので、厳密には違う)
{
"object": "page",
"id": "ページID",
"created_time": "作成日時",
"last_edited_time": "最終更新日時",
"parent": {
"type": "ページ親の種類",
"page_id": "ページ親のID"
},
"properties": {
"プロパティ名": {
"id": "プロパティID",
"type": "プロパティの型",
"プロパティの値": "値"
},
"別のプロパティ名": {
"id": "別のプロパティID",
"type": "別のプロパティの型",
"別のプロパティの値": "値"
},
...
},
"archived": boolean
}
対策
archived=true
のページでRetrive a Pageを叩くだけでok。
archived=true
のページでRetrive a Pageを叩くと404が返ってくるので、404をarchive=true
と識別する。
Retrive a Pageのエラーメッセージの意味はこちらだったので、上記に至った。
Returns a 404 HTTP response if the page doesn't exist, or if the integration doesn't have access to the page.
Returns a 400 or 429 HTTP response if the request exceeds the request limits.
困ったこと
2022/2/24時点かつ私の調べでは、GetPageResponseのarchived=true
だけを取得するエンドポイントは存在しなかったこと。
Filter database entriesで対応しているpropertyは👇で、archived
は入っていない。
checkbox
date
files
formula
multi_select
number
people
phone_number
relation
rich_text
select
status
timestamp
Discussion
すごく間違っていました。
普通にretrive a page叩いたら
archive=true
で返ってきました。変なことしないようにしましょう。