TreeFrog で作ったWebアプリから、REST なインターフェースで JSON データを返す。
まずは1件だけ返すことに絞ります。
- ちなみに TreeFrog Framework は C++ の Web フレームワークです
要件として、Qt は バージョン5.0 以上。
あらかじめ、アプリのプロジェクトは作っておいて下さい。例えば、コマンドラインからこんな感じ。
$ tspawn new booksite
$ cd booksite
MySQLデータベースにテーブルを作ります。この例は、「本」の情報を保存するテーブルだと思ってください。本のタイトル、出版社、ISBNのフィールドがあります。
mysql
mysql> CREATE DATABASE bookdb;
mysql> CREATE TABLE book (id INTEGER AUTO_INCREMENT PRIMARY KEY, title VARCHAR(20), pages INTEGER, isbn VARCHAR(20), publisher VARCHAR(50), created_at TIMESTAMP, updated_at TIMESTAMP) DEFAULT CHARSET=utf8;
config/database.ini を編集して、データベース情報を記述します。
編集が終わったら、このテーブルに対する足場をつくります。
$ tspawn s book
DriverType: QMYSQL
DatabaseName: bookdb
HostName:
Database opened successfully
created models/sqlobjects/bookobject.h
created models/book.h
created models/book.cpp
updated models/models.pro
created controllers/bookcontroller.h
:
アクションを宣言します。引数にはIDを渡すことにします。
bookcontroller.h
void json(const QString &pk);
実装を書きましょう。
bookcontroller.cpp
void BookController::json(const QString &pk)
{
Book book = Book::get(pk.toInt());
QVariantMap jsonBook = book.toVariantMap();
renderJson(jsonBook);
}
ビルドして、APサーバを起動。
$ qmake -r
$ make
$ treefrog -e dev
1件以上データを保存した状態で、http://(hostname):8800/Book/json/1 にアクセス。
{"createdAt": "2014-06-26T14:34:20","id": 2,"isbn": "B00IAXXXXX","pages": 200,"publisher": "イディ","title": "TreeFrog Framework入門","updatedAt": "2014-06-26T14:34:20"}
レコードの情報がJSONとして表現されます。
もし返したくない情報(フィールド)があれば QVariantMap オブジェクトから取り除き、renderJson()を呼べば良いです。
CURDなアクションを実装し、ルーティングを定義すれば、RESTful な実装が可能です。