SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

オール・ザット・Googleテクノロジーズ

Google API互換のAPIを自作してみよう!~ API Explorerの仕組みを利用して

オール・ザット・Googleテクノロジーズ 第2回


  • X ポスト
  • このエントリーをはてなブックマークに追加

認証が必要なAPIを実装する

 今の実装だと、全てのユーザがAPIを実行できてしまいますので、データを上書きする機能を持つ"myFirstAPI.myModel.insert"メソッドだけは認証が必要にしてみましょう。

 "YourFirstAPI"クラスの@Apiアノテーションに、次のようにclientidsパラメータを追加します。

@Api(name = "myFirstAPI", version = "v1", 
    clientIds = {com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID})

 通常clientidsパラメータの値には、APIを利用するクライアントアプリケーションのClientID文字列の配列を設定します。しかし、今回はAPIを利用するクライアントアプリケーションはAPI Explorerだけですから、API Explorer用のClientIDを指定しています。

 なお、自分のアプリケーション用のClientIDは、Developer Consoleで作成したプロジェクトから発行することができます。その手順は前回紹介していますので参考にしてください。

 次に、insertメソッドにcom.google.appengine.api.users.Userクラスの引数を追加します。

 そして、メソッド内でその値がnullかどうかをチェックし、nullだった場合にはOAuthRequestExceptionを投げるようにします。

@ApiMethod(name = "myModel.insert", path = "myModel/insert")
public MyModel insert(MyModel myModel, User user) throws OAuthRequestException {
    if (user == null) { throw new OAuthRequestException("ログインしないとダメ!"); }
    ...

 これらの修正を実装したらmvn appengine:devserverを再度実行し、ログインしていない状態で"myFirstAPI.myModel.inert"を実行してみてください。"401 Unauthorized"が返されて、実行に失敗するようになります。

ログインしていない状態ではinsertメソッドが失敗した
ログインしていない状態ではinsertメソッドが失敗した

 

 なお、ログインしているかしていないかは、APIを実行する画面の右上の方にある「Authorize requests using OAuth 2.0」を見ればわかります。ここが「OFF+赤いアイコン」ならログインしていない状態、「ON+青いアイコン」ならログインしている状態です。ON/OFFボタンをクリックすると、ログイン状態を切り替えられます。

「OFF+赤いアイコン」なのでログインしていない状態
「OFF+赤いアイコン」なのでログインしていない状態

 

「OFF+青いアイコン」なのでログインしている状態
「OFF+青いアイコン」なのでログインしている状態

 

 Cloud Endpointsでは、このようにして認証の有無をチェックできます。今回はクライアント側の実装を行いませんでしたが、クライアント側は通常のGoogle APIと全く同じように、OAuth2を使った認証によりAPIを利用できますから、実装も簡単です。

 

APIで200以外のHTTPステータスを返す方法

 今回は、ユーザがログインしていない場合にOAuthRequestExceptionを投げることで"401 Unauthorized"をクライアント側に返しましたが、Cloud Endpointsライブラリには、それ以外のHTTPステータスを返す場合に使用する例外がいくつか定義されています。Exceptions and HTTPにそれらの一覧が記載されています。

 なお、このページには401 Unauthorizedに対応するUnauthorizedExceptionが記載されていますが、公式リファレンスのUsing Auth with EndpointsではOAuthRequestExceptionを返すよう記述されているので、本記事ではそれに従いました。

 

まとめ

 今回紹介したように、Cloud Endpointsの機能を使っていくつかのアノテーションを使用するだけで、自分のアプリケーションのAPIを簡単にAPI Exolorerに対応させることができます。API Explorerが使えると、クライアント側の開発者に「今動作しているAPIの仕様」を伝えるのも楽になります。クライアント側の開発者が他のGoogle APIの経験者であった場合は、APIの使用方法も伝わりやすいという効果もあります。

 ただし、今のところGoogle App Engine向けのアプリケーションでしか使えないという制限がありますので、注意しましょう。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
オール・ザット・Googleテクノロジーズ連載記事一覧
この記事の著者

小川 信一(オガワシンイチ)

株式会社トップゲート CTO & Google API Expert。日本で唯一、Google API Expertのダブルアカウント保持者である。Google App Engineの専門書を2冊出版。日本最大のApp EngineコミュニティーでGoogle App Engineの普及活動を行い、...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8090 2014/09/13 10:11

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング