2011-02-18 6 views
6

私は最初からPHPアプリケーションを構築しています(Kohana3フレームワークを使用しています)。私は内部的にデータにアクセスするためにAPIを使うことができるように設計します。同時に、私は最終的にそれを一般に提供したいと思う。私はAPIが必要です。私はどこから始めるべきですか?

RESTfulアクセス方法を使用する予定です。しかし、私は、APIを適切に保護する方法に関する明確な情報を見つけるのは苦労しています。つまり、APIシグネチャを実装してアクセスするにはどうすればよいですか。

答えて

5

frapiを試すことができます。すぐにRESTfulなAPIを作成して、アプリケーションで使用し、後で同じAPIを公開することができます。

+0

Wow frapiはかなり甘く見えますが、一度クリックするだけでサイトがはるかにスパルタンです。 – Justin

1

デジタル署名についての一般的な情報を読んでみるとよいでしょう。ウィキペディアは素晴らしいリソースですhttp://en.wikipedia.org/wiki/Public_Key_Infrastructureまたはhttp://en.wikipedia.org/wiki/X.509
基本レベルでは、私は各クライアントにプライベートキーを与えます。クライアントライブラリでは、鍵を暗号化します。クライアントがリクエストを行うと、その特定のクライアントに発行したキーであることを確認します。

+1

それを見る別のリンクはhttp://www.oauth.net/ – NotMe

+1

です。これは私が理解しようとしていることです。 Oauthは、自分のアプリケーション内でプロバイダとして実装する方法を混乱させています。私はむしろ自分でそれを行い、学び、時代遅れの図書館を使うことを検討します。私は基本に問題があります。あなたは私が想像したものに似た何かを説明しました。セッションやクッキーは、リクエストをサインインしたままにする役割も果たしますが、委任されたサインインを使用することも、まったく別の問題です。 – Andres

0

私は基本認証付きの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; 
     } 
    } 
+0

クライアントクラスでは、クライアントがRESTful URLと話すメインインターフェイスを意味しますか?同様に、クライアント[コントローラ]、get_name [メソッド]のようなURL:site.com/api/client/123?apikey=12345 $ client-> get_name( '123'、apikey)を起動しますか? – Andres

+0

これは正しいことなので、クライアントはクラスをインクルードしてPHPファイルの中にアクセスできるようになりました。私はCURLの "get"関数を使って答えを更新します。 –

0

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の生成について考える必要はありません。

+0

ありがとうございましたが、私が探していた答えはありません。私は認証キーを探しています...。 – Andres

+0

私はfrapiのその部分を理解していませんでした(私は、彼らが "API Key"とは何かを定義しているところを見ません。)私は主題と権限に関してアクセスコントロールを行いました。サブジェクトIDを確立するための相互認証、および許可のために必要なもの。 – Justin

2

OAuthは良い選択です。したがって、単一のキー/値のペアになります。 Mashapeを見たいかもしれませんが、あなたがしようとしていることに完全に合っているかどうかは不明です。

1

3scale(http://www.3scale.net/)を参照してください。認証、アクセス制御、ポリシー、レート制限などを処理し、重要なトラフィックに対しては無料です。これらの機能を有効にするために、システムにプラグインするPHPモジュールがあります。 (免責事項 - 私はそこで働いていますが、役に立つと願っています!)

関連する問題