1

質問

同じリソースに対して異なる結果を返すにはどうすればよいですか?

詳細

私は、RESTfulAPIを構築する適切な方法についてしばらく探していました。そこにたくさんの素晴らしい情報があります。今、私は実際にこれを自分のWebサイトに適用しようとしていて、いくつかの問題に遭遇しました。データベースが適切に構造化されている必要があることを考慮して、リソースを開始点としてデータベースに基づいていると述べたいくつかの提案を見つけました。これが私のシナリオです:

私のサイト:

これが私のウェブサイトとAPIの目的についてのちょっとした情報です

人々がゲームをプレイできるサイトを作成しています。APIを使用すると、他の開発者が独自のゲームを作成し、バックエンドを使用してユーザー情報を収集して保存できるようになります。

シナリオ1:

playersすべてのプレーヤーデータを保存するデータベースがあります。開発者は、user_id(プレーヤーデータを所有する人)またはgame_id(データを収集したゲーム)のいずれかに基づいてこのデータを選択する必要があります。

リソース

http://site.com/api/players

問題:

開発者がを使用しGETて私のリソースを呼び出すと、プレーヤーのリストを受け取ります。このシステムを使用している開発者は複数いるため、すべてのプレーヤーを選択するためのIDを指定する必要があります。これは私が問題を見つけるところです。開発者が2種類のIDを指定できるようにしたいと思います。ユーザーIDまたはgame_idですべてのプレーヤーを選択できます。

  1. これをどのように処理しますか?
  2. 2つの別々のリソースが必要ですか?
4

3 に答える 3

2

コントローラ名が「Players」であるとすると、2つのメソッドがあります。

function user_get(){
   //get id from request and do something
}

function game_get(){
//get id from request and do something
}

これで、URLは次のようになります:http ://site.com/api/players/user/333、http : //site.com/api/players/game/333

  1. プレーヤーはコントローラーです。
  2. ユーザー/ゲームはアクションです

フィルスタージョンのフレームワークを使用する場合はそれを行いますが、URLは次のようになります: http ://site.com/api/players/user/id/333、http : //site.com/api/players/game / id / 333

次に、次を使用してIDを取得します。 $this->get('id');

于 2012-07-26T14:55:52.400 に答える
0

クエリ文字列パラメータを指定することで、結果を制限できます。

http://site.com/api/players?id=123

http://site.com/api/players?name=Paolo

于 2012-07-26T14:30:27.847 に答える
0

philのRESTサーバーライブラリを使用する: https ://github.com/philsturgeon/codeigniter-restserver

このライブラリは、oauthとAPIキーの生成を使用する製品環境で使用しています。APIコントローラーを作成し、必要な各リクエストのメソッドを定義します。私の場合、完全に別個のcodeigniterインスタンスを作成し、必要に応じてモデルを作成しました。

このRESTライブラリを使用して、データを挿入することもできます。そのすべてが彼のドキュメントにあります。

これは、フィルが2011年に基本について一緒に投げたビデオです 。http://philsturgeon.co.uk/blog/2011/03/video-set-up-a-rest-api-with-codeigniter

RESTful URLは、複数形/単数形の表現を使用することを意味することに注意してください。プレーヤー=単数、プレーヤー=すべてまたは複数、ゲーム|ゲームなど。


これにより、コントローラーでこのようなことができるようになります

//users method_get is the http req type.. you could use post, or put as well.
public function players_get(){
  //query db for players, pass back data
}

APIリクエストURLは次のようになります。

http://api.example.com/players/format/[csv|json|xml|html|php]

これにより、モデル内のクエリに基づいて、すべてのユーザーのjsonオブジェクトが返されます。

また

public function player_get($id = false, $game = false){
  //if $game_id isset, search by game_id
  //query db for a specific player, pass back data
}

APIリクエストURLは次のようになります。

http://api.example.com/player/game/1/format/[csv|json|xml|html|php]

また

public function playerGames_get($id){
  //query db for a specific players games based on $userid
}

APIリクエストURLは次のようになります。

http://api.example.com/playerGames/1/format/[csv|json|xml|html|php]
于 2012-07-26T15:04:55.917 に答える