Misskey APIのNoteオブジェクトにある`reactions`オブジェクトの構造を改善すべき
Summary
Misskey APIで返却されるNoteオブジェクトは現在以下の構造を持ちますが:
{
"id": "9bo5qnp68e",
"createdAt": "2023-02-25T23:28:32.634Z",
"userId": "9bf07ack4d",
"user": {
"id": "9bf07ack4d",
"name": "加藤 真也 :verified_gold_gradient:",
"username": "shinyakato",
"host": null,
"avatarUrl": "https://nos3.arkjp.net/avatar.webp?url=https%3A%2F%2Fs3.arkjp.net%2Fmisskey%2Fwebpublic-8184a4da-2a68-4dec-9026-40b193e2714b.jpg&avatar=1",
"avatarBlurhash": "ekM5K^P7x,S^%0K0Om$ir^WD}SXht6$%IqkVt5R*RlW;-7owW-azs.",
"isBot": false,
"isCat": false,
"emojis": {},
"onlineStatus": "active",
"badgeRoles": []
},
"text": "お客様が不在の為与謝野晶子を持ち帰りました。こちらにてご確認ください。",
"cw": null,
"visibility": "public",
"localOnly": false,
"renoteCount": 0,
"repliesCount": 0,
"reactions": { ":is_all_scam@.:": 5 },
"reactionEmojis": {},
"fileIds": [],
"files": [],
"replyId": null,
"renoteId": null
}
この中でreactionsオブジェクトの構造を見ると、リアクションの名前がkeyに設定されていて扱いづらいです。
{
"reactions": { ":is_all_scam@.:": 5 }
}
これは次のようなオブジェクトとして改善されるべきだと感じます。
{
"reactions": [
{
"name": ":is_all_scam@.:",
"count": 5
}
]
}
Related to #5684
こちらの提案を実装する場合は後方互換性を意識した実装にしていただきたいです。 JSONのデータ構造がオブジェクト型から配列型に変わってしまうと 既存のサードパーティがJSONをデコードできなくなってしまうので できれば別のフィールドを用意していただいて現状のフィールドを非推奨にするなどをして後方互換性を維持していただきたいです。
@acid-chicken @pantasystem
そもそも既存のv1エンドポイントに破壊的変更が入るべきではないですし、まだ使用できる既存項目を非推奨とするのも微妙だと思います。Misskey APIのバージョン管理がどのように行われているかわからないですが、仮にこの修正を行う場合は新しい v2エンドポイントのオブジェクトとして再定義されるべきです。なので、これはすぐに修正をするというものではなく、Misskey APIの将来を含めたとても大きな課題の一端だと思いますね。
例えば、Twitter APIやMastodon APIではv1エンドポイントをv2エンドポイントとして新しく再定義することで課題の改善や構造を最適化しています。
とりあえず
この中で
reactionsオブジェクトの構造を見ると、リアクションの名前がkeyに設定されていて扱いづらいです。
の具体的説明がなければ後方互換性云々以前に破壊的変更のモチベーションが薄いです
@myConsciousness おっしゃる通り大幅な変更が入る場合APIのパスなどを分けるなどをして 後方互換性を維持したりするソフトウェアもありますが Misskeyは今までに後方互換性を意識しないような予告のない破壊的変更が何度かあったため このようなコメントをしました🙇♂️