はじめに
以前、mongodb入れてみるのメモで導入や認証をやりました。
今回はメモ程度にREST使う編としてこのあたりをメモっておきます
※前回のに入れ忘れたってこともあるんですけどw
ながれ
- 設定とか有効にする
- iptables
- オプション
- 使ってみる
1. 設定とか有効にする
まずは使う前に設定を有効にします
有効にするには主に下記の2つが必要です
- ポートをあける
- オプションで有効化
ってことで
ポートをあける
こちらはiptablesを編集するだけです。
とはいえこれはmongodb入れてみるのメモのほうでやっているので、同じように最初に設定した場合はそのままでOKです
# sudo vi /etc/sysconfig/iptables --vi編集-- -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 28017 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 28018 -j ACCEPT ---------- ※iptables再起動 # sudo /etc/init.d/iptables restart
オプション変更
mongodb導入後、web consoleとRESTはこんな状態になってます
web console…ON
REST…OFF
web consoleなんかでも上部にあるCommands
に羅列されているリンクを押すと
ほとんどこんなエラー↓が出てしまうのはRESTがOFFのためです
REST is not enabled. use --rest to turn on.
check that port 28017 is secured for the network too.
RESTを有効にする方法は下記の2通りあります
- 起動オプションに
--rest
をつける - mongodb.confに
rest = true
と追記する
ってコトで、エラーにも出てるとおり素直に起動オプションのほうでやってみます
※mongodbをいったん落とす(一応pgrepで確認) # pgrep -f mongodb # pkill -f ※--restをつけてmongodbを起動 # sudo /usr/local/mongodb/bin/mongod --fork --logpath /usr/local/mongodb/logs/mongodb.log --logappend --dbpath /usr/local/mongodb/data/db --rest
web consoleで確認
Commandsのへんに羅列されてるリンクを押して各情報のjsonが表示されればOKです。
逆にまだこんなエラーが表示される場合はどこか設定を見直してください
REST is not enabled. use --rest to turn on.
check that port 28017 is secured for the network too.
2. 使ってみる
使ってみるのは簡単でRESTなのでそのまま叩けばよいです
一応これだけやってみます
- createしてみる
- create&insertしてみる
- selectしてみる
一応現状確認
dbsはadmin、local、testの3つだけ
# mongo MongoDB shell version: 2.4.8 connecting to: test > show dbs admin (empty) local 0.078125GB test 0.203125GB
createしてみる
rest apiを使ってdatabaseとcollectionを作ってみます
REST
# curl 'http://localhost:28017/rest_test/users/' { "offset" : 0, "rows": [ ], "total_rows" : 0 , "query" : {} , "millis" : 0 }
確認
# mongo MongoDB shell version: 2.4.8 connecting to: test > show dbs admin (empty) local 0.078125GB rest_test (empty)←できてる test 0.203125GB
create&insertしてみる
できたdatabaseとcollectionにそのままinsertしても良いですが、
無いテーブルに対してもデータをいきなり入れれば
database作成&collection作成&データinsertがそのままできます
REST
curl -d '{name : "piyopiyo", "message" : "ore ha piyo"}' 'http://localhost:28017/rest_test2/message/' { "ok" : true }
確認
# mongo > show dbs admin (empty) local 0.078125GB rest_test (empty) rest_test2 0.203125GB test 0.203125GB > use rest_test2 switched to db rest_test2 > show collections message system.indexes > db.message.find() { "_id" : ObjectId("5386fa8d1a40f349f9d68251"), "name" : "piyopiyo", "message" : "ore ha piyo" }
selectしてみる
selectも簡単です。
こちらんなんかにサンプルもあるので見てみると良いカモ
→http://docs.mongodb.org/ecosystem/tools/http-interfaces//
REST
- 無駄に2件ほど追加
# curl -d '{name : "hogehoge", "message" : "ore ha hoge"}' 'http://localhost:28017/rest_test2/message/' # curl -d '{name : "fugafuga", "message" : "ore ha fuga"}' 'http://localhost:28017/rest_test2/message/'
- そのままselect
{ "offset" : 0, "rows": [ { "_id" : { "$oid" : "5386fa8d1a40f349f9d68251" }, "name" : "piyopiyo", "message" : "ore ha piyo" } , { "_id" : { "$oid" : "5386fbde1a40f349f9d68252" }, "name" : "hogehoge", "message" : "ore ha hoge" } , { "_id" : { "$oid" : "5386fbe11a40f349f9d68253" }, "name" : "fugafuga", "message" : "ore ha fuga" } ], "total_rows" : 3 , "query" : {} , "millis" : 0 }
- piyoにしぼってselect
# curl 'http://127.0.0.1:28017/rest_test2/message/?filter_name=piyopiyo' { "offset" : 0, "rows": [ { "_id" : { "$oid" : "5386fa8d1a40f349f9d68251" }, "name" : "piyopiyo", "message" : "ore ha piyo" } ], "total_rows" : 1 , "query" : { "name" : "piyopiyo" } , "millis" : 0 }
こちらあんまり情報がないですがwhereというかfilterはname=piyo
ではなくfilter_name=piyo
とします
まとめ
簡単ではありますがmongodbのRESTを使ってみました!
enjoy!