スマートフォンアプリとAPIの関係
APIは“Web API”と呼ばれることが多いので、Webアプリケーションと関係が強いと感じられるでしょう。しかしAPIの活用される場所はWebだけに留まらなくなっています。その一つがスマートフォンアプリです。
iOS/Androidを中心としたアプリストアでは300万を超えるアプリが登録されています。この殆どがネットワーク機能を使っており、それらのネットワーク機能はAPIを利用しています。今回はそんなスマートフォンアプリとAPIの関係について紹介します。
多くがプラットフォームまたはプライベートAPI
アプリで使われるプラットフォームのAPIとしてはFacebookやTwitter、GitHub、GoogleなどのOAuth認証であったり、DropboxやiCloudなどのストレージAPIがあります。通常、こうしたAPIだけで構成されるものは多くなく、独自のAPIを組み合わせてアプリとしているものが多いです。
そして独自のAPIはオープンになっておらず、プライベートなAPIとして提供されています。アプリはWebアプリケーションと異なりCORS(Cross-Origin Resource Sharing)を気にせずデータの取得、更新ができるのがメリットと言えます。
ビジネスロジックを隠蔽
APIを開発する場合、その多くは細かいビジネスロジックまでサーバサイドで処理を行います。アプリはビューであったり、ユーザの入力データを受け付ける目的で利用します。なるべくビジネスロジックは持たせないのが一般的です。
理由としてはiOS/Androidへの素早い対応が期待されるからでしょう。両プラットフォームで同じロジックを実装するのであればAPIとしてサーバサイドで実装し、アプリはそれを呼び出すだけにした方が工数が減ります。そのため、プライベートAPIはそのアプリならではのニーズに合わせて設計、開発されます。
SDKを利用
プラットフォームのAPIを使う場合、その多くはプラットフォームが提供しているSDKを使います。それによってAPIを実際にコールする部分は隠蔽され、より使いやすい形でデータを操作できます。
プライベートなAPIの場合、利用するアプリが限定されるのでライブラリとして再利用性を高める程度に留まっていることが多いようです。逆にAPIを他のアプリでも使ってもらおうと思うならばSDKの開発は必須と言えるでしょう。
多くがRESTfulまたはバッチ
APIの呼び出しは多くがRESTful、JSONで返却されるようになっています。RESTfulで問題になることが多い、トランザクションが使えないと言った問題は、サーバサイドのロジックで処理するプライベートAPIで解決することが多いです。
一般的にRESTfulでは一つのリソースに対する一つの操作を1リクエストとしています。しかしこれはネットワーク通信回数を増やす傾向にあるため、アプリの動作が重たく感じられてしまいます。
そこでバッチ処理として複数のAPI操作を一回のリクエストにまとめる方法があります。この方法はAPIサーバの前にプロキシサーバが立ち、それがバッチ処理を順番にリクエストし、結果を結合して返すといった処理を行います。
セキュリティに注意
アプリとAPIサーバ間の通信はほぼ筒抜けです。もしSSL/TLSを使っていたとしてもアプリ側に設定を行うことで盗み見ることはできます。その結果として、ゲームアプリで言うところのチートなどが行われます。
そのため、通信内容は見られることを前提として誤ったデータが混入されるのを防ぐ仕組みを整えておきましょう。SSL/TLSは基本としつつ、サーバ側のロジックでチート処理に対して対策をするのは必須です。
Webブラウザは利用者保護の仕組みが整っています。外部ドメインに対してできる処理が限られていたり、サーバ側が許可しなかったらiframeやAjax処理もできないようになっています。
対してスマートフォンアプリは自由度が高くなっています。APIを提供する側としても、アプリをターゲットとするならば今回あげた要件は必須になってくるでしょう。