Ryo Yamasaki(@vierjp)です。
今回もGoogle Cloud Endpointsについてです。
前回・前々回の
・Google Cloud Endpointsを試してみた (1/3)
・Google Cloud Endpointsを試してみた (2/3)
では、「Server側(バックエンド)の作成」と「Androidクライアントの作成」を試してみました。
その後、Web先端技術味見部#17 (今回は「Google Cloud Endpoints」!)
という勉強会でのサポートの依頼があったので、
JavaScriptからのEndpointsの呼び出しも試してみました。
隣でサポートするだけの予定が急遽前に出て話す事になったので
当日の説明はグタグダになってしまいましたが。。orz
◯JavaScriptからの呼び出し方
JavaScriptからAPIを呼び出す場合もAndroidの場合と同様、関数を呼び出すだけです。
以下は一覧取得APIを実行して結果をコンソールログに出力するだけの簡単なサンプルです。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Endpointsのテスト</title> <script type="text/javascript"> function init() { var ROOT = 'http://localhost:8888/_ah/api'; // APIを使うための初期化処理 gapi.client.load('testEndpoint', 'v2', function() { // 一覧取得APIの実行 gapi.client.testEndpoint.tests.list().execute(function(resp) { console.log(JSON.stringify(resp)); }); }, ROOT); } </script> <script src="https://apis.google.com/js/client.js?onload=init"></script> </head> <body> <div> <h1>Endpointsのテスト</h1> </div> </body> </html>
注意点として、公式ドキュメントに書いてある以下の記述について、
var ROOT = 'https://your_app_id.appspot.com/_ah/api'; gapi.client.load('your_app_id', 'v1', function() { doSomethingAfterLoading(); }, ROOT);
「load」関数の第一引数として書かれている「your_app_id」はおそらく間違いで、
@APIアノテーションの「name」で指定したAPI名を指定するのが正しいと思います。
(実際にドキュメントの後半のサンプルでは「API名」を指定しています)
参考:
・Using Endpoints in a JavaScript Client
◯JavaScriptからアクセスする場合は明示的なクライアント・ライブラリの生成が不要
JavaScriptでアクセスする場合には、2013/03/29追記
「WEB-INF/*****.api」ファイルは自動的に生成されますが、
・「WEB-INF/*****-rest.discovery」
・「WEB-INF/*****-rpc.discovery」
の2ファイルは明示的に「クライアント・ライブラリの生成作業」を行うことで生成されます。
そして前項のサンプルのように、
この仕様に基づいてAPIの実行に必要な情報をアプリから取得(load)し、
目的のAPIを実行(execute)できるようになっています。
第一回で触れた「API Explorer」で、
作成した各APIをそれぞれのAPIの仕様に沿ったフォームから簡単に実行できるのも
「Google Discovery API」の仕様に準拠しているためです。
Googleが公開している各種のAPIも多くが「Google Discovery API」の仕様に準拠しています。
例えば以下のブログはEndpointsとは関係の無い記事ですが、
JavaScriptだけでGoogle URL Shortener APIを使う | せかいろぐ
Googleが提供する短縮URLを生成するためのサービス「Url Shortner」の
JavaScript APIも、具体的なAPI名や関数名を除けば
前項のEndpointsのサンプルと使い方が同じである事がわかると思います。
このようにEndpointsで公開したAPIは「Google Discovery API」の仕様に準拠しているため、
特に専用のクライアントライブラリを必要とすることなく、
Googleの各種APIを扱うのと同じように利用することができるわけです。
参考:
・API Reference - Google APIs Discovery Service — Google Developers
◯サンプルアプリ
・JavaScript経由でEndpointsを通じてCRUDする動作サンプル突貫で作ったので結構適当です(;´∀`)
・サンプルアプリのeclipseプロジェクト
Bitbucketの公開リポジトリに配置しています。
サーバー側の実装も前回までに使用したものとは少し変わっていますが、やってることはほとんど同じです。
・サンプルアプリのAPI Explorer
Endpointsの第一回に書いた「API Explorer」を実際に動作させることが可能です。
◯まとめ
Endpointsを使う場合、JavaScriptからAPIにアクセスする場合にも自分で非同期通信の処理等を書くことなく、
関数を呼ぶだけでAPIを呼び出して処理を実行して結果を取得することができます。
Endpointsで作成したAPIは、自動的に「Google Discovery API」の仕様に準拠します。
JavaScriptで「Google Discovery API」の仕様に沿って呼び出すことで、APIを実行することが可能です。
といったところで、Endpointsの第三回は「JavaScriptからの実行方法」でした。
もしかしたらEndpoints でのOAuth2.0対応についてもそのうち調べて書くかも?
それではまた(`・ω・´)ノシ
* 2013/04/12 追記 OAuth2については以下をどうぞ
「appengine ja night #24 Google Cloud Endpoints and BigQuery」
のスライドで説明しています。
Tweet
0 件のコメント:
コメントを投稿