mBaaSではAndroid向けにJava SDKを提供していますが、これはAndroidと密結合になっており、サーバサイドで利用できるものではありません。そこで純粋なJavaを用いてmBaaSにアクセスしてみましょう。
前回、署名を生成する処理とGET処理を紹介しました。今回はmBaaSにPOSTする処理を紹介します。
署名を取得する
これは前回の通りです。
Signature s = new Signature();
String signature = s.sign(method, path, applicationKey, ts, queries, clientKey);
HTTPリクエストを生成する
HTTPリクエストするためのオブジェクトを作成します。以下の処理は try/catch の中で行っていきます。
HttpURLConnection con = null; StringBuffer result = new StringBuffer(); try { URL url = new URL("https://" + Signature.FQDN + path); con = (HttpURLConnection) url.openConnection(); }
HTTPヘッダーのセッティング
HTTPヘッダーに値を設定します。アプリケーションキー、署名、そしてタイムスタンプを設定します。
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'"); df.setTimeZone(new SimpleTimeZone(0, "GMT")); con.setRequestMethod(method); con.setRequestProperty("Content-Type", "application/json"); con.setRequestProperty(Signature.NCMB_APPLICATION_KEY_NAME, applicationKey); con.setRequestProperty(Signature.NCMB_APPLICATION_TIMESTAMP_NAME, df.format(ts)); con.setRequestProperty("X-NCMB-Signature", signature);
POSTデータのセット
ポストするデータはJSONObjectで作成しておきます。そのデータがあれば、書き込みます。
if (data != null) { con.setDoOutput(true); OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream()); out.write(data.toString()); out.close(); }
HTTPリクエストの実行
HTTPリクエストを実行して、その結果が201かどうか判定します。通常の200ではなく201なので注意してください。今後の処理は リクエスト成功時の処理を書く
のブロック内に記述します。
con.connect(); final int status = con.getResponseCode(); if (status == HttpURLConnection.HTTP_CREATED) { // リクエスト成功時の処理を書く }else{ System.out.println(status); }
レスポンスを受け取る
リクエスト結果を受け取ります。これはJSONで返ってきます。
final InputStream in = con.getInputStream(); String encoding = con.getContentEncoding(); if(null == encoding){ encoding = "UTF-8"; } final InputStreamReader inReader = new InputStreamReader(in, encoding); final BufferedReader bufReader = new BufferedReader(inReader); String line = null; // 1行ずつテキストを読み込む while((line = bufReader.readLine()) != null) { result.append(line); } bufReader.close(); inReader.close(); in.close(); System.out.println(result);
JSONで結果を受け取ったら org.json.JSONObject
などを使ってパースすれば良いでしょう。
まとめ
ここまでの処理でJavaからのGET/POST処理が完成しました。HTTPメソッドをPUT/DELETEに変えるのは難しいことではないでしょう。ぜひサーバサイドとmBaaSを組み合わせたシステム構築時の参考にしてください。
サンプルコードをNCMBMania/ncmb_javaにアップロードしてあります。実装時の参考にしてください。