問題
REST APIとRust CLIを別々に開発すると、レスポンスのJSON構造が噛み合わなくなる。
典型的な不一致パターン:
| API が返す | CLI が期待する | エラー |
|---|
[{...}] (配列直接) | { "items": [{...}] } (ラップ) | invalid type: map, expected a sequence |
{ "success": true } | { "message": "..." } | missing field 'message' |
{ "id", "name", "extra_field" } | { "id", "name" } (フィールド不足) | missing field 'extra_field' ではなく別のエラー |
対策
- APIレスポンスは常にオブジェクトでラップする(
{ tasks: [...] } 形式)。拡張性も高い
- Rust側のデシリアライズ構造体は、APIが返す全フィールドを網羅するか、
#[serde(deny_unknown_fields)] を付けない(デフォルトで未知フィールドは無視される)
- API仕様を先に決めてから両方実装する。OpenAPI等で契約を明文化するのがベスト