技術めも

Parse - Mobile Backend as a Service

Parse とは

スマホアプリでサーバサイドを簡単にクラウド上で作れる代表的なサービス(MBaaSと言われてます)。

サーバサイドの知識が無くても簡単に下記等が行えます。

まさにアプリエンジニアの救世主!

  • ユーザー管理
  • PUSH通知
  • データストレージ(KVS)
  • 課金システム
  • SNS連携
  • メール送信

個人的な MBaaS (Parse) のイメージ

①② iOS等のアプリケーションエンジニアは、Parse SDK を使って必要機能を持つオブジェクトを生成

③ そのオブジェクトに対して、データ保持、PUSH通知、SNS認証等の操作を行う

しかして、その実態は!

オブジェクトが Parse サーバのテーブル(Class)、PUSH通知機能、SNS認証機能等を操作(APIコール)!

アプリエンジニアが(あまり)サーバサイドを気にせずに、サーバサイド連携アプリケーションを作成可能!

オフィシャルURL

  • オフィシャルサイト

https://parse.com/

  • チュートリアル

https://parse.com/tutorials

  • デフォルトで用意されているAPI

https://parse.com/docs/rest#summary

→ これらをアプリケーションから叩いて処理を行う場合、基本的にサーバサイドのプログラムは不要

  • 自作API(Cloud Code)

https://parse.com/docs/cloud_code_guide

  • 自作APIで使用出来る拡張モジュール(Mailgun, Mandrill, Twilio, Stripe, etc)

https://parse.com/docs/cloud_modules_guide#cloud_modules

  • いろいろな言語のライブラリ(SDK)

https://parse.com/docs/api_libraries

おすすめURL(主に Cloud Code)

  • Parseにサーバーサイドのコードを書いてiOSアプリから呼ぶ

http://qiita.com/shu223/items/c2222e4e1f87d473b23a

  • [MBaaS] Parseで簡単モバイルバックエンド構築 – 【ざっと概要】

http://dev.classmethod.jp/cloud/parse-introduction-1/

  • Parse - Cloud Code - Cloud Functions

http://murayama.hatenablog.com/entry/2014/01/15/223630

  • PHPからParseでPush通知

http://tech.aainc.co.jp/archives/7155

  • Node.jsのmoduleの書き方の基本: 別のファイルのオブジェクトや関数をrequireして使う方法

http://memo.yomukaku.net/entries/jbjiYnP

  • Node.js v0.4.12 Manual & Documentation

http://nodejs.jp/nodejs.org_ja/docs/v0.4/api/modules.html

  • Parse の Cloud Code を試す

http://nirasan.hatenablog.com/entry/2013/09/30/133401

DashBoard

https://parse.com/apps/

Data Browser

Class(テーブル)を閲覧、編集するGUI画面

Cloud Code

開発環境 初期設定方法

https://parse.com/docs/cloud_code_guide#started

※ 最初 Python のエラーが出て動かなかった。古い(特定)バージョンの Python では動かない模様。Python 2.7.3 にアップデートして解決しました

適当なサーバ上でプログラム(JavaScript)を開発

→ 開発は作成したプログラムを Parse に deploy する

$ perse deploy

Parse は node.js ベースで動いているっぽいので、開発には node.js の情報が役に立ちます。

Hello Paese

このようなサンプルアプリを deploy した場合

Parse.Cloud.define("hello", function(request, response) {
  response.success("Hello Parse!");
});

このような API で実行ができる

※ HTTPヘッダに Parse-Application-Id、Parse-REST-API-Key が必要です

https://api.parse.com/1/functions/hello

成功すると結果の JSON が帰ってきます

{"result":"Hello Parse!"}

API テストツール

安価でつくってみたので、使ってください。

Parse Cloud Code テストツール

Cloud Code を使ってみる

これに挑戦

https://parse.com/docs/cloud_code_guide#functions

Cloud Code で標準以外の「オリジナルAPI」をつくってみましょう

この「映画の平均スター数」を応答するサンプルプログラムを parse deploy

Parse.Cloud.define("averageStars", function(request, response) {
  var query = new Parse.Query("Review");
  query.equalTo("movie", request.params.movie);
  query.find({
    success: function(results) {
      var sum = 0;
      for (var i = 0; i < results.length; ++i) {
        sum += results[i].get("stars");
      }
      response.success(sum / results.length);
    },
    error: function() {
      response.error("movie lookup failed");
    }
  });
});

curl を使用して API アクセス

$ curl -X POST \
>   -H "X-Parse-Application-Id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
>   -H "X-Parse-REST-API-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
>   -H "Content-Type: application/json" \
>   -d '{"movie":"The Matrix"}' \
>   https://api.parse.com/1/functions/averageStars

あれ?

{"result":null}

テーブル(Class)が無いですね (´・ω・`)

Data Browser から作成します。

「New Class」で「Review Class」を作りました。

「movie」カラムと「stars」カラムを追加します。


データを手で入れます。Starsは普通は整数だと思うんですが、Number型で少数以下も入るかテスト

curl を使用して API アクセス 再トライ

$ curl -X POST \
>   -H "X-Parse-Application-Id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
>   -H "X-Parse-REST-API-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
>   -H "Content-Type: application/json" \
>   -d '{"movie":"The Matrix"}' \
>   https://api.parse.com/1/functions/averageStars

成功した模様です

{"result":4.433333333333334}