NotionAPIで、削除したはずのRelationデータが取得できてしまう問題と対策

ハマったので再現方法と解決方法をメモします。

再現方法

まず、test1、test2データベースを作ります。

スクリーンショット 2021-06-09 21.50.25
スクリーンショット 2021-06-09 21.50.32

test1の「Related to test2」プロパティはtest2へのRelationになっています。
この状態でtest1を「Query a database」APIで取得すると、a-1,b-2が取得できます。
これは想定通りの挙動です。

次に、test2の1,2レコードを削除します。

スクリーンショット 2021-06-09 21.55.17

当然、test1の「Related to test2」プロパティも削除されています。

スクリーンショット 2021-06-09 21.55.25

もう一度、この状態でtest1を「Query a database」APIで取得すると、
なぜか、a-1,b-2が取得できてしまいます。
これにハマりました。

解決方法

削除しているのになぜ取得できてしまうのか、何かキャッシュ的なものが残っているのかと考えていると、ふと「Trash(ゴミ箱)」が目につきました。まさかと思って覗いてみると・・・

スクリーンショット 2021-06-09 22.35.09

削除したはずのtest2の1,2レコードが「Trash(ゴミ箱)」に残っている!
試しにこれをひとつずつ削除してみました。

その結果、無事、a-1,b-2が取得できなくなりました(削除されました)!

・レスポンスデータ(抜粋)

{
   "object": "list",
       "results": [
           {
               "properties": {
                   "Related to test2 (Tags)": {
                       "id": "NBUI",
                       "type": "relation",
                       "relation": [],
                   },
                   "Name": {
                       "id": "title",
                       "type": "title",
                       "title": [
                           {
                               "type": "text",
                               "text": {
                                   "content": "b",
                                   "link": null
                               },
                               "annotations": {
                                   "bold": false,
                                   "italic": false,
                                   "strikethrough": false,
                                   "underline": false,
                                   "code": false,
                                   "color": "default"
                               },
                               "plain_text": "b",
                               "href": null
                           }
                       ],
                   }
               }
           },
           {
               "properties": {
                   "Related to test2 (Tags)": {
                       "id": "NBUI",
                       "type": "relation",
                       "relation": [],
                   },
                   "Name": {
                       "id": "title",
                       "type": "title",
                       "title": [
                           {
                               "type": "text",
                               "text": {
                                   "content": "a",
                                   "link": null
                               },
                               "annotations": {
                                   "bold": false,
                                   "italic": false,
                                   "strikethrough": false,
                                   "underline": false,
                                   "code": false,
                                   "color": "default"
                               },
                               "plain_text": "a",
                               "href": null
                           }
                       ],
                   }
               }
           }
       ],
}

まとめ

バグなのか仕様なのかはわかりませんが、リレーション先のデータを削除しただけでは、ゴミ箱に残っている限りは、NotionAPIで取得できてしまうようです。
ゴミ箱から削除、までしっかりやるのが吉です。

というか、ゴミ箱に残るのはよいのですが、それが存在するリレーションデータとして取得できてしまうのが仕様とは思えません。取得しないように修正してほしいところです。

最後に宣伝です。

コメント

タイトルとURLをコピーしました