Datasourceとはなんぞや?
CakePHPはおよそリレーショナルデータベースでデータを扱うように設計されていますが、それ以外にもファイルにデータを持たせたり、NoSQLなどをデータとすることもできます。
それための枠組みがDatasourceです。
CakePHPのDatasourceディレクトリを覗いてみると、MySQL、PostgreSQLなどのリレーショナルデータベース用のクラスが用意されています。ここにクラスを追加すれば、CouchDBやMongoDBなどに接続することもできるわけですね。
ModelのインタフェースはDatasourceが変わっても同じ
DatasourceへのアクセスはModelが責任をもって行うので、Controllerなどから直接Datasourceを操作することはありません。
ControllerはModelを介してDatasourceにアクセスしますが、そのModelのインタフェースはDatasourceが変わっても同じです。つまり、Model::find(), Model::save(), Model::delete()などです。
だから、データベースをMySQLからPostgreSQLに変更したり、もしかしたらNoSQLに変更してもDatasourceがちゃんと互換性を持って記述されていれば、Controller以降は全くそれを意識する必要がありません。
Modelのインタフェースの設計がリレーショナルデータベースに寄っているので、NoSQLなどをDatasourceにする場合はちょっと面倒かもしれません。とはいえ、Modelが使える全ての機能を実装する必要もないので、必要な部分だけ使えるようにするのであれば、それほど大きな手間でもなさそうです。
探り探りAmazon S3を操作する
実は大目標は、「CakePHPからAmazon DynamoDBに接続すること」なのですが、その前に練習としてAmazon S3を操作するDatasourceを作成しました。
https://github.com/mikesmullin/CakePHP-AWS-S3-Plugin
https://github.com/primeminister/CakePHP-Amazon-S3-plugin
先人が既にいるので、それを使っても良いですが、これらはCakePHP2.xの仕様に乗っていないので、新しく作りました。
やりたいこと
今回作るAmazonS3Sourceで、何がやりたいかといえば、Amazon S3のオブジェクトの操作です。
たとえば、画像をアップロードできたり。
$this->Image->save(array(
'name' => 'test.png',
'path' => '/tmp/test.png',
));
名前で検索してデータを取得できたり。
$image = $this->Image->findByName('test.png');
削除できたりしてほしいです。
$this->Image->delete('test.png');
コメント
[…] Post navigation ← Previous […]