2

RESTful API の各リソースに PHP クラスがあります。リクエスト メソッドに応じて、適切な関数を呼び出すようにルーティングされます。ユーザーに対する GET 呼び出しの例を次に示します。

Class Users{
    public function get($params){
        // get information and return result
    }
}

すべてのユーザーをリクエストすると、/api/users/. 単一ユーザーのリクエスト/api/users/:id
これまでのところ問題はありません。

今私の質問: このようなものを要求するとき/api/users/:id/posts、API は特定の ID を持つユーザーによって作成されたすべての投稿を返す必要があります (これPostsは別のリソースです)

上記の PHP クラス構造でこの呼び出しをどのように実装しますか?

get()リソース内の関数内のパラメーターで処理しますUsersか?
新しいリソースを追加しUsersPostsますか? クラス
の新しいメソッドに関数を追加しますか?Users

4

2 に答える 2

1

リクエストでどのコントローラー クラスとメソッドが呼び出されるかを決定する Router クラスを作成する必要があります (Symfony や Kohana などの確立されたフレームワークをチェックして、アイデアのルーティングをどのように処理するか、またはそれらを使用するかを確認してください!)。そこから、あなたがするかどうかはあなたUsers::getPosts($userId)次第Posts:getByUserId($userId)です(私にとって、UsersPostsクラスはある種の相互参照を示し、コントローラーまたはモデルの最適な名前ではないかもしれません)。

于 2013-08-30T14:47:32.633 に答える
0

2 つの異なるリソースを同時に処理するよりも、「ユーザー」を投稿リソースへのフィルターと考えたほうが簡単です。

次のようになります。

/api/posts/by_user/user_id

このようにして、API ページごとに 1 つのリソースのみを保持し、必要な数のフィルターを適用できます。

/api/posts/by_user/USER_ID/category/videos/

個人的にはさらに進んで、URL スキームに order_by や order_dir などの他の基準があり、それらはすべて相互に追加して、次のように交換できます。

/api/posts/category/videos/by_user/USER_ID/order_by/title/order_dir/asc/limit/5
于 2013-08-30T15:01:20.257 に答える