web-dev-qa-db-ja.com

バックエンドとしてのWebサービス

応募の方向性を考えています。アプリケーションはMVCフレームワークを実装するPHPで記述されています。

一部のクライアントはWebサービスを必要とします。基本的なPHP WebインターフェースをこれらのWebサービス(SOAP)の上に構築し、PHPアプリケーションがデータベースにアクセスできないようにします。これを行うと、メインのPHPアプリケーションにアクセスするためのコード一式と、このWebサービス上で開発された他のアプリケーションも維持する必要があります。これは一般的な設定ですか?アプリケーションが大幅に遅くなりますか?

Djangoフレームワークを使用してSOAP Webサービスをセットアップするために使用しましたが、その後、使用しているクライアントに基づいて複数の同一のデータベースを処理するのに問題があることがわかりました。

私はSymfonyを調べましたが、バックエンドとしてのPHPは、将来のより大きなクライアントによっては安全ではない、または専門的ではないと見なされ、エンタープライズで使用できない場合があります。

私は今Axis2を考えています。 Javaはバックエンドとして高速で、潜在的なクライアントに市場性をもたらすでしょう。

他にどのようなWebサービスフレームワークを検討する必要がありますか?このWebサービスバックエンド/ PHP/HTMLフロントエンドは使用可能なソリューションですか?

3
Apothan

はい、これはより大きなアプリケーションでは非常に一般的な設定です。ただし、Webサービスを呼び出すたびに、アプリケーションに遅延が追加されます。したがって、ラウンドトリップの数を減らし、サービスからフェッチする必要のあるデータの量を減らすために、Webサービスを適切に設計する必要があります。

私はあなたが最も親しんでいる言語に固執することをお勧めします。

Djangoと複数のデータベースについて:Djangoは、複数のデータベースの組み込みサポートを備えています。クエリベースまたはモデルベースで(および同じモデルの読み取り/書き込み操作に別のデータベースを使用することもできます)。

2
ercpe

このアプローチはかなり一般的であり、他の人が開発するプラットフォームを実際に構築している場合はより理にかなっています。独自のアプリで独自のWebサービスを使用する(独自のドッグフードを食べる)ことにより、プラットフォームの強さを検証できます。あなたがカバーすることを確認するための事柄:

Webサービスプラットフォーム:

  • データベースサーバーをメモリまたはmemcacheサーバーに格納したり、より静的なWebサービス(つまり、ルックアップデータを返すWebサービス)にCDNを使用したりして、読み取り操作にできる限り多くのキャッシュを利用できます(重要なのはディスクの量を減らすことです)システム全体でI/Oを実行します。外部のCDNサーバーにオフロードすることで、多くの処理リソースを節約できることをプログラマーはしばしば忘れます
    • ダウンロード時間を短縮するためにgzipを使用して応答をキャッシュすることを忘れないでください
    • クライアントアプリケーションが余分な呼び出しを行わないように、ラウンドトリップを最小限に抑えるために、よりリッチなオブジェクトを返すことを検討してください。つまり、請求書オブジェクトのリストを返す代わりに、invoice-itemオブジェクトをgetinvoicesタイプのWebサービス内にネストすることもできます。圧縮された応答を使用すると、それだけはるかに重くなり、ラウンドトリップを節約できます。さらに良いのは、呼び出し側のアプリケーションがフラグを渡して、戻りオブジェクトがどの程度「豊富」であるかを判別できるようにすることです。
    • 異なるクライアントにAPIキーを発行して検証し、トラフィックの管理、レート制限、乱用の防止を実現
    • 私はあなたがSOAPについて言及したことを知っていますが、コンシューマエコシステムが採用を容易にするためにかなりオープンになる場合は、純粋なRESTful json/xmlタイプのAPIの計画が必要かもしれません。
2
koa