はじめに
以前、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!