クイックバージョン:
制御するパブリック ホスト (場合によってはデータベース ホストである必要はありません) で実行されている Web サービス ミッドレイヤーを使用します。公開 Web サービス メソッドを公開して、許可したい限られた作業だけを行います。
関連する質問:
実装オプション
個人的には、 Apache TomcatやJBoss AS 7などの Java アプリケーション サーバーを使用し、 JAX-RSを使用して Web サービス メソッドを作成し、アプリで使用する優れた REST スタイルの API を生成します。それは私がよく知っていることであり、うまく機能しますが、次の実装を含む多くのオプションがあります。
HTTP 要求を使用して JSON または XML 応答を生成する REST に似た API (Java の JAX-RS impls Jersey および RESTEasy、その他のさまざまな言語ツール)。
古典的な「Web サービス」層である WSDL を使用した SOAP。Javaでは、他のオプションの中でもJAX-WSで行われます。ほとんどの言語には SOAP+WSDL 用のツールがありますが、特にモバイルのように断続的に接続されているデバイスで使用するのはちょっと面倒です。
苦痛が好きならXML-RPC
JBoss AS 7 クイックスタートリストにJAX-RSクイックスタートがいくつかあります。「JAX-RS」を検索するだけです。「kitchen sink」クイックスタートは便利ですが、JBoss AS 7 と Jave EE 6 の基本に慣れていない場合は理想的ではないかもしれません。またはこれ。
重要な考慮事項
可能であれば HTTPS を使用し、アクセスを公開しない場合は、HTTP 経由の HTTP 基本認証などの適切な HTTP 認証スキームを使用します。適切な Web サービスの実装は、認証オプションを提供するか、それが実行されるプラットフォームのものをサポートします。Web サービス層で独自の認証とユーザー管理を実装しようという誘惑は避けてください。すでに作成およびテストされている HTTP レイヤーで認証を使用します。これには、Apacheのようなものの使用が必要になる場合がありますmod_auth_pgsql
、JBoss AS 7 の JDBC セキュリティ レルムなど。適切なユーザーごとの HTTP 認証を行わないと考える唯一のケースは、セキュリティ上の理由でユーザーを分離する必要がない場合です。サーバーにアクセスするアプリであることだけを気にします。 、つまり、セキュリティ要件が非常に弱い場合。この場合、アプリ全体に固定のユーザー名/パスワードを使用し、Android がサポートしている場合は X.509 クライアント証明書を使用する可能性があります。
物事をどのように保護しても、すべての資格情報はユーザーに知られているか、.apk から簡単に抽出できるため、アプリだけでなく、誰もが Web サービス メソッドにアクセスできると想定する必要があります。それに応じてそれらを書きます。
サーバーへの Web サービス呼び出しを介してアプリから SQL を送信し、結果を JSON として返すだけではありません。これは恐ろしく安全ではなく、醜く不格好です。アプリで実行できるようにする個々のタスクごとに Web サービス メソッドを記述し、SQL をサーバーに保持します。パラメーター化されたクエリを使用し、他の SQL インジェクションのリスクに注意してください。これらの Web サービス メソッドは、1 つ以上のクエリを使用して 1 つの応答を生成する場合があります。たとえば、「Customer」レコードと、関連するすべての「Address」および「Contact」レコードを収集し、結果を適切な JSON オブジェクトで Android デバイスに返すことができます。消費することができ、低速で信頼性の低いネットワーク ラウンド トリップを数多く節約できます。
何を使用する場合でも、バックグラウンド ワーカー スレッドで Web サービス呼び出しを行い、ユーザー インターフェイスをブロックしないようにしてください。タイムアウトとエラー、および再試行の必要性に備えてください。断続的な接続損失、高レイテンシー、高率のパケット損失をシミュレートしてアプリをテストし、引き続き使用できることを確認します。