discovery documentを生成する
"YourFirstAPI"クラスをCloud EndpointsのAPIとして実装できれば、次のコマンドを実行することで、APIの仕様となるDiscovery Documentを生成できます。
mvn appengine:endpoints_get_discovery_doc
コマンドが正常終了すれば次のようなメッセージが表示され、"target/generated-sources/appengine-endpoints/WEB-INF/myFirstAPI-v1-rest.discovery"ファイルが作成されます。
INFO: Successfully processed appengine-endpoints/target/generated-sources/appengine-endpoints/WEB-INF/appengine-web.xml API Discovery Document written to appengine-endpoints/target/generated-sources/appengine-endpoints/WEB-INF/myFirstAPI-v1-rpc.discovery [INFO] Endpoints discovery doc generation done.
"target/generated-sources/appengine-endpoints/WEB-INF/myFirstAPI-v1-rest.discovery"ファイルをエディタで開いてみると、"MyFirstAPI"クラスや"MyModel"クラス、"insert"メソッドや"list"メソッドなど、先ほど作成したAPIに関する情報が含まれていることが確認できます。
アプリケーションを実行する
これでAPIの実装とその仕様を作成できたので、次のコマンドで開発サーバを起動します。
mvn appengine:devserver
Dev App Server is now running
というメッセージが表示されたら、ブラウザで"http://localhost:8080/_ah/api/explorer"を開いてみましょう。すると、http://apis-explorer.appspot.com/にリダイレクトされ、今実装した"MyFirstAPI"というAPIが表示されています。
"MyFirstAPI"をクリックすると、insertやlistといった、先ほど実装したメソッドが表示されています。
"myFirstAPI.myModel.insert"をクリックすると、insertメソッドを実行するフォームが表示されます。
ここで"Request body"をクリックすると、MyModelの構造に従った入力コンポーネントが表示されるので、"message"に適当な文字列を入力して"Execute"をクリックします。
正しくinsertが実行されると、APIを実行した際のリクエスト情報と、APIから返されたレスポンス情報が表示されます。API Explorerが持つ、Discovery Documentに従ったWebクライアントの自動生成機能が利用できているわけです。
insertメソッドを使っていくつかデータを入力した後で、API Explorerから"myFirstAPI.myModel.list"を実行すると、入力したデータの一覧が表示されます。
このように、Cloud Endpointsを使うとAPI Explorerから、自分のアプリケーションのAPIを簡単に試すことできます。APIを試すために、わざわざクライアント側を実装する必要がないので、非常に便利に感じるのではないでしょうか。
先の手順でendpoints_get_discovery_doc
ゴールを紹介しましたが、実はdevserver
ゴールを実行することでも内部的にendpoints_get_discovery_doc
ゴールが実行され、disocvery documentが自動生成されます。ですので、コードを修正した後はmvn appengine:endpoints_get_discovery_doc
を実行せずに、いきなりmvn appengine:devserver
を実行しても構いません。
ただし、APIの実装に問題があるなどの理由でdisovery documentの生成に失敗した場合、devserver
ゴールだとendpoints_get_discovery_doc
ゴールの実行結果が流されてしまい、分かりにくくなる場合があります。API ExplorerがAPIの定義を読み込めていないような動作(API一覧が表示されないなど)を見せた場合には、手間を惜しまずendpoints_get_discovery_doc
ゴールだけを実行して、その実行結果をよく確認することをおすすめします。