web-dev-qa-db-ja.com

アプリとWebサイト間の通信に最適な方法は? PHP、Webサービスなど

私は自分のウェブサイトと通信したいアプリケーションを作成しています。アプリは、ウェブサイトのデータベースから特定のアプリユーザーのデータを取得する必要があります。これを行うための最良の方法は不明です。

たとえば、これを行う1つの方法は、アプリにログインページを作成し、それが私のウェブサイトのlogin.phpロジックにヒットすることです。 1つのコードベースを使用して、Webサイトとアプリの両方のサインインを処理できるため、これは便利です。

私が見た別のソリューションは、JSONリクエストを使用してアプリとウェブサイト間の通信を処理することです。 JSONオブジェクトは作成と解析が簡単なので、これは便利です。

私は基本的に、このコミュニケーションを実現するための最良の/一般的な方法、他のものと比べて長所と短所、および考慮すべきその他のセキュリティ問題を知りたいです。

たとえば、一方の方法をもう一方の方法で使用する場合、機密のユーザーデータを公開するリスクはありますか?もしそうなら、これをどのように防ぐことができますか?暗号化とユーザー検証は、どこでどのように機能しますか?

8
edc598

アプリケーションとWebサイトにREST APIを構築することをお勧めします。

Webサービスの作成はより手間がかかりますが、かなりクリーンだと思います。このようにすると、データベースに接続してクエリする方法をWebサイトやアプリケーションで心配する必要はありません。これらの詳細はすべてAPIによって抽象化されるためです。また、もう1つの利点はセキュリティです。Webサイトがハッキングされた場合、WebサイトはAPI呼び出しのみを実行しているため(データベース呼び出しは実行していないため)、必ずしもデータベースにアクセスできるとは限りません。セキュリティ、しかしそれはあなたが心配しなければならない1つのより少ない事です。

PHPでREST APIを作成する方法に関する優れたスターターガイドは次のとおりです。

http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

6
ChezMix

要件の複雑さに応じて、REST/JSONまたはSOAP Webサービス。

単純な要件の場合、RESTは、特にXMLよりもJSONを優先する場合、理解と実装が簡単です。

ただし、要件に認証、メッセージの検証、発見、否認防止、または複雑なメッセージスキーマが含まれている場合は、ほぼすべての問題がカバーされているため、SOAPの複雑さを詳しく調べる方がよい場合があります。 SOAPはより複雑で理解が困難ですが、メッセージングシステムで発生する可能性のあるほぼすべてのアーキテクチャの順列とバリエーションを処理します。さらに、非常に成熟した包括的なツールセットを備えているため、 API。ただし、このレベルの高度化が必要ない場合は、RESTを使用してください。

1
James Anderson

APIの最大の欠点は、JSONリクエストを作成し、回答を変換し、ブラウザでページに表示する責任があることです。本質的に、またはユーザーがJavaスクリプトをオフにしているため、すべてのブラウザーがこれに対応しているとは限りません。

しかし、これらの懸念は時間の経過とともに減少してきており、現在は比較的少数のクライアントにしか影響を与えていません。ただし、allクライアントをサポートするには、追加の作業を行う価値があります。

APIの利点は、表示の詳細からAPIロジックを分離するのがはるかに簡単で、ブラウザー以外の方法(別のアプリケーションなど)でAPIに直接アクセスするのが簡単なことです。これにより、APIのテストとクライアントのテストが自動的に分離されます。これは良いことです。

また、JSONを適切に解析してエスケープするのが、HTMLドキュメント(Javaスクリプトを含むスクリプトタグを含めることができる)の場合よりも簡単なので、ページインジェクション攻撃(クロスサイトスクリプティング攻撃など)に対してもより安全です。これは、クライアントでJSONパーサーを使用してJSONを解析し、まったく安全でない何らかの形式のeval()を使用しないことを前提としています。

もう1つの可能な利点は、「Webフレームワーク」レイヤーをほぼすべて排除できることです。 ASP、JSP、Django、Zendなどの代わりに、JSONをクライアントからサーバーにリレーするための薄いレイヤーが必要です。したがって、必要に応じて、フレームワーク間で簡単に移植できるようにすることもできます。これにより、アプリケーションから大きな可動部分を1つ取り除くことができます。

暗号化と検証は基本的にどちらの方法でも同じように機能すると思います。攻撃者はブラウザをクライアントとして使用する必要はなく、ヘッダーを送信できることを忘れてしまう可能性があるため、APIを使用している場合、Webページを使用している場合よりもクライアントを信頼しないことを覚えている可能性が高いと思います、クエリパラメータ、必要な投稿データ。ただし、これは技術的な問題というよりは心理的な問題であり、当てはまらない場合があります。

0
psr