私は最初からPHPアプリケーションを構築しています(Kohana3フレームワークを使用しています)。私は内部的にデータにアクセスするためにAPIを使うことができるように設計します。同時に、私は最終的にそれを一般に提供したいと思う。私はAPIが必要です。私はどこから始めるべきですか?
RESTfulアクセス方法を使用する予定です。しかし、私は、APIを適切に保護する方法に関する明確な情報を見つけるのは苦労しています。つまり、APIシグネチャを実装してアクセスするにはどうすればよいですか。
私は最初からPHPアプリケーションを構築しています(Kohana3フレームワークを使用しています)。私は内部的にデータにアクセスするためにAPIを使うことができるように設計します。同時に、私は最終的にそれを一般に提供したいと思う。私はAPIが必要です。私はどこから始めるべきですか?
RESTfulアクセス方法を使用する予定です。しかし、私は、APIを適切に保護する方法に関する明確な情報を見つけるのは苦労しています。つまり、APIシグネチャを実装してアクセスするにはどうすればよいですか。
frapiを試すことができます。すぐにRESTfulなAPIを作成して、アプリケーションで使用し、後で同じAPIを公開することができます。
デジタル署名についての一般的な情報を読んでみるとよいでしょう。ウィキペディアは素晴らしいリソースですhttp://en.wikipedia.org/wiki/Public_Key_Infrastructureまたはhttp://en.wikipedia.org/wiki/X.509。
基本レベルでは、私は各クライアントにプライベートキーを与えます。クライアントライブラリでは、鍵を暗号化します。クライアントがリクエストを行うと、その特定のクライアントに発行したキーであることを確認します。
私は基本認証付きのCodeIgniterを使用してPHP REST APIを作成しました(ユーザーIDとパスワードとして「会社ID」と「APIキー」を提供しています)。後で、APIキーに直接関係していたセッションキーを有効期限付きでプロビジョニングする必要があることがわかりました。
基本的には、URLに「メソッド」が提供されているかどうかによって、データストア(nosql variety)のさまざまなタイプのデータを照会しました。私たちはCodeIgniterが提供する "セグメント"能力を使ってこれにアクセスしました。
次に、返された「json_encode」で各応答をラップし、セキュリティのためにHTTPS接続も使用しました。
クライアントクラスでは、$ client-> get_my_data($ api_key)などのすべての呼び出しをPHP Libcurlを使ってラップしました.LibcurlはBasic Authを提供するのに本当にうまく機能します。このことができます
希望、ご質問はこれよりも少し大きい
private function curl_get($url, $apikey, $co)
{
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl_handle, CURLOPT_USERPWD, $co.":".$apikey);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_DNS_USE_GLOBAL_CACHE, FALSE);
$buffer = curl_exec($curl_handle);
$error = curl_error($curl_handle);
curl_close($curl_handle);
// check for success or failure
if (empty($buffer)) {
//echo 'Something went wrong :(error: '.$error.'<Br>';
} else {
return $buffer;
}
}
クライアントクラスでは、クライアントがRESTful URLと話すメインインターフェイスを意味しますか?同様に、クライアント[コントローラ]、get_name [メソッド]のようなURL:site.com/api/client/123?apikey=12345 $ client-> get_name( '123'、apikey)を起動しますか? – Andres
これは正しいことなので、クライアントはクラスをインクルードしてPHPファイルの中にアクセスできるようになりました。私はCURLの "get"関数を使って答えを更新します。 –
CURL_GET。しかし、私はRESTについての小さな観察を提供することができます。
RESTでは自然キーではなく、基礎となるデータモデルに人工キーを使用することをお勧めします。
たとえば、RESTfullのURL:https://server/yourApp/viewUser/1234.html
とすると、IDが1234のユーザーが表示されます。ただし、自然キーを使用した場合は、https://server/yourApp/viewUser/Bob.html
のようなURLがある可能性があります。または、Bobの代わりに "Bob X"ボブ?キー=値」を選択します。無効なURLの生成について考える必要はありません。
OAuthは良い選択です。したがって、単一のキー/値のペアになります。 Mashapeを見たいかもしれませんが、あなたがしようとしていることに完全に合っているかどうかは不明です。
3scale(http://www.3scale.net/)を参照してください。認証、アクセス制御、ポリシー、レート制限などを処理し、重要なトラフィックに対しては無料です。これらの機能を有効にするために、システムにプラグインするPHPモジュールがあります。 (免責事項 - 私はそこで働いていますが、役に立つと願っています!)
Wow frapiはかなり甘く見えますが、一度クリックするだけでサイトがはるかにスパルタンです。 – Justin