Redmineダウンローダ開発メモ(2) コマンドプロンプトからDocker内のRedmineサーバーにアクセスする - ドナドナされるプログラマのメモ の続き。今回はソフト開発。
今回のRedmineからデータをダウンロードするプロジェクトの動機は、他社に管理されているRedmineデータの保全と証拠取り。そのため、全てのデータを根こそぎ、ただし相手サーバーに負荷をかけないように取り出す必要がある。となると・・・動作としては
- Issuesの一覧を最終更新日などを含む形で取得する。
- 最終更新日が手元データより新しいものをリストアップする。
- リストアップしたIssueをダウンロードする。
- Issueに新規添付ファイルがあったら、これもダウンロードする。
上記を所定の休止間隔で実行すればいいかな。となると、データ構造も自然と定まるなあ。すなわち、少なくとも以下3種類のファイルを持たせる。
- Issueの一覧および最終更新日のデータ
- 各Issueごとのデータ
- 各Issueの添付ファイル
Issue一覧は複数回に分けて取得しうるので、ファイル名は回数をそのまま使うことにしよう。
Issueと添付ファイルは密接に関連付けたいので、Issueごとにフォルダを作り、その中に添付ファイルを保存する。フォルダ名はIssueのID、フォルダ内のIssueファイルも同じくIssueID、添付ファイルはID_ファイル名としよう(同一ファイル名が複数個登録されうるため)。
ソフトの流れとしては、
- Issue一覧を取得・更新する。
- Issue一覧記載のIssueと各Issueを比較し、不足するIssueがあったら取得する。
- Issue一覧記載の最終更新日と各Issueの最終更新日を比較し、更新があったIssueは更新する。
という感じにすれば各処理が独立するので不定期なプログラミングでも作りやすくなるはず。
RESTには定番ライブラリであるCppRestを使おう。
CppRestはxml・jsonの両方に対応しているけど、メインはjsonらしいのでGETはjsonで。また、データ保存もjsonにする。
・・・よし、おおざっぱな設計ができた。次は実装だ。まずは一覧の取得からだ。今日はここまで。
続き: