ParseのREST APIを試してみた。やりたいことは次の二つ。
- username/passwordでサインアップ
- サインアップしたユーザーにしかread/writeできない権限でデータをポスト
サインアップ
まずはサインアップ。
/users
に対してusername
とpassword
をPOSTする。データ形式はapplication/json
しか受け付けないらしい。
$ curl -X POST \
-H "X-Parse-Application-Id: $PARSE_APP_ID" \
-H "X-Parse-REST-API-Key: $PARSE_REST_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"username":"myname", "password":"hoge"}' \
https://api.parse.com/1/users
成功すると次のようなデータが返ってくる。
{
"createdAt":"2014-03-21T14:32:04.522Z",
"objectId":"3t829izrt4",
"sessionToken":"yeoql2dvn7whpm4tbe61viscv"
}
このobjectId
とsessionToken
は後から使う。
ちなみにobjectId
やsessionToken
は/login
にリクエストすることで再取得可能。
$ curl -X GET \
-H "X-Parse-Application-Id: $PARSE_APP_ID" \
-H "X-Parse-REST-API-Key: $PARSE_REST_API_KEY" \
'https://api.parse.com/1/login?username=myname&password=hoge'
データの追加
次に、Note
というClass(RDBでいうテーブルにあたるもの。ParseではClassと呼ぶらしい)に今サインアップしたユーザーにしか読み書きできないデータを追加する。
$ curl -X POST \
-H "X-Parse-Application-Id: $PARSE_APP_ID" \
-H "X-Parse-REST-API-Key: $PARSE_REST_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"text": "hoge", "ACL": {"3t829izrt4": {"read": true, "write": true }}}' \
https://api.parse.com/1/classes/Note
POSTするデータのACL
にユーザーのobjectIdをキーにしてread、writeがtrueになるようなオブジェクトを指定することでそのユーザーにしか読み書きできないようにできる。
データの取得
つくったデータが自分にしか読めないか確認してみる。X-Parse-Session-Token
にユーザーsessionToken
を指定するのがポイント。
$ curl -X GET \
-H "X-Parse-Application-Id: $PARSE_APP_ID" \
-H "X-Parse-REST-API-Key: $PARSE_REST_API_KEY" \
-H "X-Parse-Session-Token: yeoql2dvn7whpm4tbe61viscv" \
https://api.parse.com/1/classes/Note
{"results":[{"text":"hoge","createdAt":"2014-03-21T14:45:50.148Z","updatedAt":"2014-03-21T14:45:50.148Z","objectId":"7Ki9ZmPC2b","ACL":{"3t829izrt4":{"read":true,"write":true}}}]}
取得できてる。
自分しか読めないかどうかは別のユーザーを作ってみて同じリクエストを投げてみればわかる。
$ curl -X GET \
-H "X-Parse-Application-Id: $PARSE_APP_ID" \
-H "X-Parse-REST-API-Key: $PARSE_REST_API_KEY" \
-H "X-Parse-Session-Token: utbstfsrvvlt2osvfayqnx44" \
https://api.parse.com/1/classes/Note
{"results":[]}
このように確かに他のユーザーからは取得できないのがわかる。
データの更新
データの更新も同じようにX-Parse-Session-Token
をつけて投げるだけ。
$ curl -X PUT \
-H "X-Parse-Application-Id: $PARSE_APP_ID" \
-H "X-Parse-REST-API-Key: $PARSE_REST_API_KEY" \
-H "X-Parse-Session-Token: yeoql2dvn7whpm4tbe61viscv" \
-H 'Content-Type: application/json' \
-d '{"text": "updated!"}' \
https://api.parse.com/1/classes/Note/7Ki9ZmPC2b
できてしまえば簡単だけどできることが多くてドキュメントから目的のものを探すのが大変だった。