web-dev-qa-db-ja.com

Webインターフェイスに独自のパブリックAPIを使用する必要がありますか?

Djangoとその残りのフレームワークを使用してAPIを設計しています(バージョン管理の手間がかかるかどうかはまだわかりません)。

私はiOSを完全に知っており、AndroidアプリがAPIを呼び出し、トークンを取得します(有効期限が切れている場合は、それについてもう少し読む必要があります)。その後、以降のすべての呼び出しでこのトークンを使用して認証することができます。

しかし、私の主な質問は次のとおりです:私のWebインターフェイスでAPIを使用する必要がありますか?

あまり実用的ではないようなので、セッションとCookieを使用し、トークンを取得してすべてに対してAJAX呼び出しを行うよりも、バックエンドレンダーテンプレートにデータを渡すようにしています。

4
soueuls

これらは [〜#〜] spa [〜#〜] を作成するための引数であり、私を納得させます:

  1. アプリケーションをオフラインで使用できるようにしますか?接続がない場合のGmailの動作を確認します。機能は非常に限られていますが、まだ使用可能です。 HTML5にはクライアント側のストレージに関する多くのオプションが用意されているため、物事をさらに一歩進めることができます。サーバー側のストレージは、バックアップおよび同期コンポーネントとしてのみ扱われる場合があります。これにより、クライアントが fault-tolarant になります。
  2. クリックするたびにアプリケーションが応答するまでの時間をどのくらいにしますか?Googleで行われた調査によると、ユーザーはアプリケーションを高速であると感じています 応答 200ms未満後にフィードバックがある場合。何かが長く続く場合は、長時間続く操作の表示が表示されます(スピナーまたはプログレスバー)。これはSPAでのみ実行できます。
  3. 1種類のクライアントを特別な方法で扱いたいのはなぜですか?1つのクライアントの種類にのみサーバー側のコードを実装すると、おそらくより多くのコードが記述されます。システムのアーキテクチャの simplicity およびおそらく [〜#〜] dry [〜#〜] の問題。
  4. APIは、ソフトウェアエントロピーを遅くする明確に定義された境界です。設計するAPIがあるという唯一の事実は、実際にソフトウェアを設計するという非常に良い習慣を強いています。境界が適切に定義されていない場合、偶発的な相互依存関係が追加されるため、システムの 保守性 が(時間的に)低下する可能性があります。これはより大きなコードベースで重要になります。
  5. プレゼンテーションロジックをクライアントに移動すると、サーバーで必要なリソースが削減されます。使用しているテクノロジー、プロジェクトのサイズ、およびプレゼンテーションに関するプロジェクトの量によっては、プロジェクトのコストが大幅に削減される場合があります。私は、サーバー側のリソースの半分がプレゼンテーションロジックとセッションストレージ(JSFを広範囲に使用)によって消費されるプロジェクトを見てきました。

したがって、プロジェクトで上記のいずれも問題にならず、JavaScriptの知識がチームで制限されている場合は、古い学校のサーバー側テンプレートのレンダリングに固執することをお勧めします。


あなたの質問は私に SPAに関するブログ投稿 を書く動機を与えました。

2

Webクライアントが直接APIを使用することは有効なアプローチです。

このAPIは、ユーザーセッションを作成し、クライアントがすべての呼び出しで渡すトークンを返す方法をサポートする必要があります。

このソリューションには次のメリットがあります

  • すべてのクライアント(モバイル、Web、外部)が同じAPIを使用しているため、維持とスケーリングが容易になります
  • HTMLレンダリングの責任を完全にクライアント側で維持します。これは、現在のJavaScriptフレームワークで十分にサポートされています。

別のアプローチは、レンダリング、セッション管理を行うWeb APIの上にレイヤーを作成することです。必要以上に複雑に思えたので、これを行っていません。

0
astreltsov