Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away