2013-03-10 13 views
11

私はクロスプラットフォームシステムを開発しており、それらを結びつけるために残りのAPIを作る必要があります。私はPHPで長年の経験があり、私はこのサービスのためにこれを使用したいと思います。良いPHP Rest APIライブラリ

私は手動でAPIを100%開発することができましたが、開発を楽にする素晴らしいライブラリがいくつかあると思います。

誰もこのようなライブラリの経験はありますか?あなたがお勧めできるものは何ですか?

+1

が良い記事です:[Symfony2のとRESTのAPI:右ウェイ](http://williamdurand.fr/2012/08/02/rest-apis-with-symfony2 - 右 - /) – j0k

+0

@ j0k:クール、私はそれを見てみましょう。おそらくその解決策は簡単かもしれません。ありがとう。 – OptimusCrime

+0

あなたはどうしていますか? –

答えて

11

私はバッジを得た(私は1つは、それはそれが簡単にあなたのコントローラ内からリソースを作成することができますということだと思います)、より多くのREST指向の機能を持っていませんこの質問はPopular questionだから、私がREST-solutonをどうやって作ったのかについてはっきりとした時間だと思う。

私は、このREST APIのLaravel、Sympfony2、およびCodeigniterの両方を調べました。彼らはすべて私が好きだったいくつかの要素があり、私は嫌いでした。私の主な関心事は、ユーザーがGoogleやFacebookのサービスを提供するaccess_tokenまたはaccess_tokensでログインできる、かなり複雑なアルゴリズムを使用していたため、認証を行う方法でした。私はまた私のフレームワークを完全にコントロールしていることを認識しており、上記のフレームワークには不必要で、回避するのが難しい要素がいくつかありました。このため、私は自分のRESTソリューションを作ることに決めました。予想以上に難しいことではなく、いくつかの方法で実行できます。私がやったやり方は、OOPプログラミングに関する知識が必要です。

Okeyだから、RESTという基本クラスを作り始めました。このクラスは、すべての呼び出しで共通するすべての処理を行います。認証と同様に、要求されたパスをメソッドに構文解析して、access_tokenなどをチェックします。

このクラスの中心的なものの1つは、要求されたパスとメソッドへの変換方法です。私はLaravelに触発されました。私はkey =>valueの配列を持っています。ここで、キーは一致するはずのURLであり、値は実際に呼び出すメソッドです。

'/user/(:id)' => 'user_id', 

これは、任意の/ユーザー/ [番号]を一致します:私はまたLavavelがそうのようなURLの変数を解析する方法が含まれています。これはどのタイプのリクエストであるかをチェックするので、単純なget-methodの場合はget_user_idを呼び出そうとします。 (:id)で解析されたものは、そのメソッドを呼び出すときに引数として使用されます(したがって実際にはget_user_id($id)を呼び出しています)。

認証後、実際のメソッド呼び出しが評価されます。私はすべてのメソッド(例えばget_user_id)をRESTクラス自体に入れたくないので、RESTクラスを拡張する別のコントローラでこれらを壊しました。これは、要求されているURLを調べることによって行われます。 /user/(:id)の場合、スクリプトはuserController.phpというコントローラが存在するかどうかをチェックします。存在する場合は、呼び出すメソッドが存在するかどうかを確認します。もしそうなら、引数の数が私たちのものと一致するかどうかを確認してください。すべてが良い場合は、エラーメッセージを返さない場合はメソッドを実行します。このようなAPIを作成する場合、構造とエラーメッセージは非常に重要です。

さまざまなコントローラでは、認証を取得するためにRESTクラスのコンストラクタを呼び出し、解決されたURLなどの解析を行います。ここの難しい部分は、私がしたくないということです。

$controller = new MyController(); 
$controller->printResponse(); 

すべてのコントローラの一番下にあります。だから私はちょっとハックし、run.phpと呼ばれるスクリプトを作成し、これはすべてのコントローラクラスに対してこれを動的に実行します。 run.phpを含める前に、コントローラのパスを保存するには、単に$path = explode('/',__FILE__);を実行します。これは実行スクリプトで使用されます。実行スクリプトは次のようになります。

// Splitting the file-name, removing the extension 
$name = explode('.',$path[count($path)-1]); 

// Uppercasing the first letter to be nice and OOP-ish 
$classToCall = ucfirst($name[0]); 

// Creating a new instance 
$controller = new $classToCall(); 

// Logging 
$controller->doLog(); 

// Printing the final response 
$controller->printResponse(); 

これは、私が自分のAPIをどのように構築したいのかのための完璧な解決策であることがわかりました。メソッドにURLを解析する配列に新しいメソッドを追加することで簡単に新しいメソッドを追加することができます。また、きれいに分割されたコントローラに新しいメソッドを追加して最大限のクリーンナップを実現できます。

これはあまりにも多くの仕事だと思う人もいますが、実際にそれを稼働させるには数時間しかかかりませんでした。私はまた、新しいコントローラを追加するだけで、これが非常に動的であると呼んでいます。システムは、有効なURLパターンであれば、それらを認識します。


いくつかの丁寧なアドバイス。

このソリューションに類似するものを使用する場合は、これらのヒントを参考にしてください。各コントローラーで次のような操作を行います。

public function __construct() { 
    // Loading the class-name, setting it in the REST-class, so we can check if it holds the method being called 
    $this->className = get_class($this); 

    // Calling RESTs constructor 
    parent::__construct(); 
} 

現在作業しているクラスを保存する必要があります。これはUserControllerなどです。

RESTクラスでは、この変数を使用して、呼び出された実際のメソッドがこのコントローラに存在するかどうかを確認できます。私はこのようにしました:

// Checking if the method exists 
if (method_exists($this->className,$method_name)) { 
    // Check to see if we have the required number of arguments represented 
    $ReflectionClass = new ReflectionClass($this->className); 

    if ($ReflectionClass->getMethod($method_name)->getNumberOfParameters() == count($this->methodUrl['args'])) { 
     $this->response['response'] = call_user_func_array(array($this, $method_name), $this->methodUrl['args']); 

すべてがあなたを得ることを望みます。

ハッピーcodin'ここ

+0

GitHubでコードをアップロードできますか?私のPHP知識は限られており、私のアプリにもユーザがいるからです。 –

+0

@SouravBagchi私の答えは更新されているはずです。今はかなり古くなっています。私はスリムを見て、マイクロサービスとしてそれを使用することをお勧めします。私の答えは、PHPプログラミング言語の紹介ではありませんでした。 – OptimusCrime

+0

すぐにお返事ありがとうございます。 Slimフレームワークでユーザー管理を処理できますか?私が直面した主な問題はユーザー管理です。 GoogleとFacebookの統合によるログインプロセスとMySQLデータベースには、ログインしたユーザーだけがアクセスできるデータがあります。 –

0

私は3か月前に同じ質問をしました。私は、使用する最高のPHPフレームワークを研究するために多くの時間を費やしました。最後に私はLaravelに定住しました。

すぐに使えるのは、RESTfulなルートとコントローラーが付属しており、使いやすい認証です。私は、単純なRESTのAPIを持っていたし、約一日で実行しているまた、超簡単なリソースを設定作る偉大なORMが付属しています

http://laravel.com/docs/routing#the-basics

http://laravel.com/docs/controllers#restful-controllers

http://laravel.com/docs/database/eloquent

私はバージョン3.2を使用していますし、それは魅力的に機能し、安定しています。バージョン4はまだベータ版ですが、ここでは

グレートチュートリアルhttp://net.tutsplus.com/tutorials/php/laravel-4-a-start-at-a-restful-api/