70
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ParseのREST APIでユーザー認証とデータの読み書き

Posted at

ParseのREST APIを試してみた。やりたいことは次の二つ。

  • username/passwordでサインアップ
  • サインアップしたユーザーにしかread/writeできない権限でデータをポスト

サインアップ

まずはサインアップ。

/usersに対してusernamepasswordを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"
}

このobjectIdsessionTokenは後から使う。

ちなみにobjectIdsessionToken/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

できてしまえば簡単だけどできることが多くてドキュメントから目的のものを探すのが大変だった。

70
71
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
70
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?