4

PHPWebサービスを作成しようとしています。私はPHPを初めて使用します。2つの文字列変数を持つJavaアプリケーションがあります。サーバーから実行されているphpアプリケーションにアクセスするには、これをサーバーデータベースに保存する必要があります。だから私はそれをサーバーに置く必要があります。したがって、Webサービスを作成する必要があります。Webサービスにデータを送信することは可能ですか?Webサービスを使用してデータベースにデータを書き込むことは可能ですか?

4

1 に答える 1

5

以下の例は、PHPの単純なAPI / Webサービス(サーバー側とクライアント側の両方)を示しています。

Javaクライアント側が必要な場合(誰かがそうだとコメントしているのがわかります)、Javaで処理できる方法で応答をスクランブルする方法を見つける必要があります。たとえば、JavaScriptjQueryの形式でPHPと通信する場合です。Webサービスの応答には、javascriptによって理解できるjson応答が含まれている可能性があります。私はJavaに精通していません。

はじめましょう

あなたの質問は、あなたが望むものを説明する方法においてちょっと奇妙です。私の知る限り、Webサービスはサーバー上で実行されるアプリケーションであり、着信要求(get / post / rawデータ)に基づいてアクションを処理できます。これらのアクションには、データのフェッチ、データの変更、データの登録などがあります。関連するデータベースまたはデータを保存する/データを取得するためのテキストベースのファイルがあることを意味します。

それがあなたの言いたいことなら、そうです..それは可能です。サーバーaにデータモデルとアクションのリスト、およびnが含まれているaddgetしますdelete。あなたが最初に考えたいと思うかもしれないことはあなたのサービスのためのある種のセキュリティです。基本的なセキュリティの例は、webserver-keyを使用することです。私は通常、ランダムなmd5()で生成された文字列を使用します。もちろん、これはあなたが取ることができる最高のセキュリティではありません。キーを知っている人なら誰でもそれを使用できるからですが、後でこれに戻ります。

Webサーバーへのアクセスのセキュリティに加えて、データの送信方法も検討してください。cURLを使用してサービスにpost/getリクエストを送信することを選択できますが、これにはすべてのオープンデータが含まれます。もう1つのオプション(もう少しスクランブル)は、送信する前にシリアル化することです。さらに一歩進んで、文字列をbase64_encodeすることもできます。これにより、少なくとも、Webサーバーに転送されるデータの読み取り不可能なパラメーターが作成されます。最良の場合、Webサービスで利用可能なカスタムキーを作成し、Webサービスと通信するサーバーを作成します。このキーは、シリアル化されたパラメーターをスクランブルし、Webアプリのサービス/ユーザー側の両方で応答/パラメーターをスクランブル解除するために使用できます。

Webサービスからのデータを要求する別のサーバーがあることがわかったので、「Webサービスキー」に別のセキュリティレイヤーを追加することもできます。Webサービスへのすべてのリクエストは、いくつかのパラメータを送信します($_SERVER['REMOTE_ADDR']これらは、キーをサーバーIPまたはドメインホストとペアリングするために使用できます)。これにより、サービスにアクセスできるユーザーの数が制限されます。

さて、非常に基本的な例はどのように見えるでしょうか?

まず、Webサービス。パラメータに基づいて着信リクエストを処理するOO-​​wayを使用できますが、プレーンなPHPファイルを使用することもできます。

http://www.webservice.com/api-contacts.php

  • 必須パラメーター:アクション
  • オプションのパラメータ:IDと名前

$ _GET ['action']='get'および$_GET['id'] = '2'を使用してapi.phpにリクエストを送信すると、ID'2'の連絡先を含む応答が返される可能性があります。

このデータを要求するには、いくつかのオプションがあります。最も基本的なのはfile_get_contentsまたはcURLです。必要なものを正確に取得するために変更できるオプションがはるかに多いため、cURLの方が優れていると思います。

これがクライアント側のスクリプトであると考えると、次のようになります。

$param = array();
$param['action'] = 'get';
$param['id'] = 2;
$params = base64_encode(serialize($param)); // generates a scrambled string

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.webservice.com/api-contacts.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLTOP_POSTFIELDS, 'data='.$params);
$result = curl_exec($ch);
curl_close($ch);

もちろん、api-contacts.phpは、最初に$ _POST ['data']文字列をbase64_decodingしてから、結果を逆シリアル化します。

$data = unserialize(base64_decode($_POST['data']));

その後にいくつかのチェックが続きます:-$ data ['action']は有効ですか?-はいの場合:必要なパラメーターが見つかりました(削除/取得のID、追加の名前)-はいの場合:フィールドチェックを実行します(有効な名前、有効なID)-はいの場合:結果を挿入、削除、または取得します-はいの場合:応答を返す

また、応答は配列になります。たとえば、

$response = array(
  'result' => 'success',
  'data' => mysql_fetch_assoc($getUser) // obviously this is just to illustrate there's userdata in the 'api-contacts.php?action=get&id=2' request.
);

$result最後になりましたが、クライアント側で文字列のシリアル化を解除してbase64_decodeすることを忘れないでください。

これは、異なるサーバー上のドメイン間でデータを共有するための単純なWebサービスを実装する方法の基本的な説明です。もちろん、私は他の人々からのあらゆる種類の改善やヒントを受け入れています。

//小さなアドオン:

応答をシリアル化してbase64でエンコードする理由は、配列をテキスト応答として送信できないためです。また、シリアル化された文字列は、クライアントが受信したときに問題を引き起こす可能性があります。

パラメータのシリアル化とbase64エンコーディングは必要ありません。httpプロトコルを介してデータを転送する際のセキュリティが少し強化されます。CURL_OPTPOSTFIELDSを'?action = get&id = 2'として使用するだけで、問題なく動作します。www.webservice.com/api-contacts/get/2または、サービスでわかりやすいURLを使用して、たとえばURLを作成したい場合もあります。

応答タイプとして、いくつかの一般的なものがあります:1)XML応答2)JSON応答3)base64_encodedシリアル化された配列

ただし、場合によっては、単純なテキスト応答「ok」で十分です。または、「200OK」などのHTTPヘッダー応答を理解するようにWebサービスを構築することもできます。

于 2013-03-27T10:20:07.120 に答える