OpenShiftでREST APIを作る。
掲題の通り、OpenShiftでREST APIを作ってみた。
経緯としては、Androidの授業でデータの格納場所の話をしたところ、
さらっと紹介したサーバー連携への食いつきが良くて、要望が挙がっていた。
出来上がってみると大したことはしていないのだが、Windowsの人間でこういったモダンな開発やDBに慣れていなかったのが大きいと思う。もう一つ大きかったのが、無料と海外からのアクセスというハードル。
まずサービスについては、OpenShiftを最初から第一に考えて選んだ。
というのも、同じように海外にいる人からWordPressならOpenShiftと勧められており、無料、海外からもいじれるなどのハードルがクリアされていたので結構悩まず選んだ。ただ、他のサービスでも同様なのかもだが、OpenShiftではroot権限は付与されず、中にモジュールを入れるのはカートリッジという考え方で行うらしいため、sshでログインしてよくあるサンプルみたいにインストールしようとしてもうまく行かなかった。(知識があまりないので何か別の理由だったのかもしれないが分からない。)
これ以上書くと愚痴になるのでやったことだけ書いていく。
1.まずは、OpenShiftでアカウントを作成する。
Create an account | OpenShift Online by Red Hat
2.次に、開発に必要なツール類を整備する。OpenShift管理用のクライアントのインストールを行う。Ruby、Git、rhcをインストールする。このタイミングでrhc setupを行うこと。sshキーが生成される。
3.次にREST APIテスト用にChrome拡張アプリのPostmanがない人はPostmanを入れておく。別に他のでもいい。
4.次に、アプリケーションの構築を行う。このサイトに従って行うと一瞬で出来上がる。
作成したサイトを開くとメッセージが表示され、Postmanを使ってデータの登録、削除が出来る。管理画面には作成したアプリが表示される。
nodewsをクリックすると詳細画面に移動する。
詳細画面の画面上部、真ん中のリンクをクリックすると、シンプルなメッセージが表示される。これでちゃんとアプリが入っていることが分かる。
5.次に、現在のソースを見てみる。コマンドプロンプトを開き、適当なフォルダを開き、git clone ssh://XXXXXXXXXX@nodews-YYYYY.rhcloud.com/~git/nodews.git
のようにコマンドを打つ。git cloneの後は詳細画面の右上のをコピペするとOK。
で、フォルダにコピーされるので、早速フォルダを開いて、package.jsonを開いてみる。こんな感じで、依存関係などの定義が記述されている。
次に、server.jsを開く。
ここも色々と書いてあるが、注意したいのは3か所。
①DBの定義
// Setup
self.dbServer = new mongodb.Server(process.env.OPENSHIFT_MONGODB_DB_HOST,parseInt(process.env.OPENSHIFT_MONGODB_DB_PORT));
self.db = new mongodb.Db(process.env.OPENSHIFT_APP_NAME, self.dbServer, {auto_reconnect: true});
self.dbUser = process.env.OPENSHIFT_MONGODB_DB_USERNAME;
self.dbPass = process.env.OPENSHIFT_MONGODB_DB_PASSWORD;
この辺りは、まぁこういう感じで変数で定義されているんだなぁと思っておく。
②特定のキーに対する処理
//returns all the parks in the collection
self.routes['returnAllParks'] = function(req, res){
self.db.collection('parkpoints').find().toArray(function(err, names) {
res.header("Content-Type:","application/json");
res.end(JSON.stringify(names));
});
};
こんな感じで、特定のキーに対してどういう処理をするかを定義している。
上記の3行目は、dbからparkpointsという名前のコレクションを取得し、
JSONに変換して返している。
③ルートとキーの登録
self.app.get('/ws/parks', self.routes['returnAllParks']);
命令に対してどのメソッドを実行するかを定義している。
上記では、'/ws/parks'へのHTTP GETの場合、returnAllParksのキーの関数を実行するよう登録している。
上記の記述に合わせて、処理を登録すると新規のREST APIが作成できる。
DB、server.jsの編集が必要。
OpenShiftのサイトでPuttyが紹介されていたので、Puttyにしました。
PuttyとPuttyGenをインストールする。sshキーを作っていれば最初の方は無視してOK。PuttyGenでプライベートキーを作成。Puttyで接続先の設定を行ってから接続する。設定が必要なのは2つ。1:ホストは先ほどの詳細画面の右下に表示することが出来る、sshとスペースの後から始まる文字列。2:Connection>SSH>authと左のツリービューを開いて、プライベートキーとして、先ほどPuttyGenで生成したファイルを選ぶ。
設定1
設定2
Openをクリック。
OpenShiftにログイン
以下の通りタイプするとMongoDBにログイン。
mongo
以下のコマンドでOpenShiftのアプリで利用しているDBに切り替える。
use nodews
続けて以下のコマンドで現在のRDBでいうテーブルである、コレクションの一覧が見れる。
show collections;
(messagesは後から追加したやつなので、それ以外が表示されるはず)
続けて以下のコマンドでコレクションを新規作成する。
ここがピンと来ないけど、構造とか作成しないでコレクションが作れるらしい。
db.createCollection('test');
(ここでは名前をtestにしてみた。)
そして、データを登録。
db.user.insert({name:'mr.a', age:10, gender:'m', hobbies:['programming']});
するとOKと表示される。
引き続き、以下のコマンドでデータを確認。
db.test.find()
7.server.jsを編集
上記の2か所をコレクション名に合わせて編集。
コマンドプロンプトを開き、git commit, push を行う。
特に問題なければsuccessとなる。
これをPostmanで叩くとこんな感じで成功。
MongoDBについては下記を参考にさせていただきました。
ありがとうございます。