-1

私は単純な PHP API を持っています。cURLクライアントに使用$_POSTし、サーバー側でリクエストを受け入れるだけです。何かのようなもの ..

クライアント:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/api-server");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('q' => 'world!'));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1);
$response = curl_exec($ch);
curl_close($ch);

echo json_decode($response);
?>

サーバ:

<?php
echo json_encode("hello, ".$_POST["q"]);
?>

ここでの私の質問は次のとおりです。

  • とにかく、私はまだ標準の API ロジックに従っていますか?
  • この API サーバー アクセスを「保護」する方法は?
4

3 に答える 3

1

さて、私が上で尋ねたことについてここで見つけました: http://php.net/manual/en/features.http-auth.php

APIページに単純に使用されます:

if ( $_SERVER['PHP_AUTH_USER'] == $MY_API_USER && $_SERVER['PHP_AUTH_PW'] == $MY_API_PW) {
    ..
    ..
} else {
    header('WWW-Authenticate: Basic realm="Sorry, this API is protected. You may need a valid authentication."');
    header('HTTP/1.0 401 Unauthorized');
    exit;
}

Caller/Requester 側で、次の 2 行をcURL呼び出しに追加します。

..
curl_setopt($ch, CURLOPT_USERPWD, $MY_API_USER.":".$MY_API_PWD);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
..

私にとっては、それだけです。

于 2013-06-11T02:20:45.497 に答える
1

API エンジンを作成しようとしないでください。これらは業界標準です。SOAP または REST を見てください。

すべての面倒な作業を行うライブラリのいくつかを次に示します。

次に、これらを保護するために、OAuth などを通じて基本的な http 保護を使用できます。

于 2013-05-15T04:18:08.793 に答える
0

HTTP などの明確に定義された通信プロトコルや、JSON などのトランスポート形式がありますが、API アーキテクチャの実際の実装は開発者に任されています。

API レイヤーの構築を支援するために、完全なフレームワークからモジュラー コンポーネントまで、多くの既存のツールが存在しますが、結局のところ、機能するものを構築する必要があります。

サーバーが必要な場合は、サーバーに焦点を当て、利用可能な場合は標準に準拠する実装に焦点を当て、それ以外の場合はベスト プラクティスに準拠します。リソース アーキテクチャ、認証などのファセットが含まれます。

現在、クエリ パラメータが連結された JSON を吐き出しています。あなたがechoサーバーを求めていない限り、それが意図した最終結果であるとは思えません。

サービスまたはドメイン モデルに従って API をモデル化します。メソッドとプロパティを API レイヤーのリソースとして公開します。

補遺: ああ、「保護」については。すでに述べた HTTP Basic または OAuth の手法は適切な候補ですが、私の回答の核心と同様に、必要なものによって異なります。

于 2013-05-15T05:02:19.083 に答える