tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

mongodbでREST APIを使ってみる - RESTを有効にする、iptables変更、使ってみる、まで

はじめに

以前、mongodb入れてみるのメモで導入や認証をやりました。
今回はメモ程度にREST使う編としてこのあたりをメモっておきます

※前回のに入れ忘れたってこともあるんですけどw

ながれ

  1. 設定とか有効にする
  2. 使ってみる

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です。

f:id:tweeeety:20140529180331p:plain

逆にまだこんなエラーが表示される場合はどこか設定を見直してください

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!