4

私のAPIには、次のリソースがあります。

example.com/api/v1/users/me/sites
example.com/api/v1/users/123/sites

現在のユーザーまたは特定のユーザーのすべてのサイトを返します。

ここで、すべてのサイトを取得して、ユーザーを無視したい場合はどうすればよいでしょうか。次の URL になると思います。

example.com/api/v1/sites

サイトをルート リソースとして、またユーザーのサブリソースとして使用するのは少し奇妙に思えます。

これはOKなアプローチですか、それとも他の方法でこれを行うのが一般的ですか?

または、次のようにする必要があります。

example.com/api/v1/users/sites

ユーザーのIDがない場所はどこですか?

4

3 に答える 3

3

私にとっては、経験則として、API から返されるものを見て、これは通常、私が何を表しているかを知らせます。

たとえば、example.com/api/v1/users/123/sites という URL のユーザーではなく、実際にはサイトを返しています。この場合、返されているのはサイトであるため、サイトにアドレス指定することをお勧めします。

したがって、次の URL を選択します: example.com/api/v1/sites?user=123

IMHO、これはクエリ文字列をサイトの実際のクエリとして利用しています。

したがって、サイトの表現については、次のように構築します。

  1. すべてのサイト: example.com/api/v1/sites

  2. 特定のサイト: example.com/api/v1/sites/1

  3. ユーザーのサイト: example.com/api/v1/sites?user=123

  4. 現在のユーザーのサイト: example.com/api/v1/sites?user=current

于 2013-09-04T16:00:32.020 に答える
2

この興味深い質問に何かを追加したかったのです。

たとえば、次のようにして、特定のサイトを「所有」しているユーザーを見つけることができます

example.com/api/v1/sites/[site_id]/user

これにより、site_id を持つサイトを所有するユーザー リソースが返されます。

もう 1 つの例は、ユーザーとアドレスです。ユーザーがアドレス リソースを共有できるようにする場合 (アドレスには複数のユーザーを含めることができます)、次のようにすることができます。

example.com/api/v1/users/[user_id]/address=> user_id を持つユーザーのアドレスを返します。そのパスで操作を行うDELETEと、アドレス リソース全体が削除されるのではなく、ユーザーとアドレスの間の接続のみが削除されます。アドレス自体を削除するには、次の手順を実行する必要がありDELETEますexample.com/api/v1/addresses/[address_id]

example.com/api/v1/addresses/[address_id]/usersDELETE=> そのアドレスに住んでいるユーザーを返します。同様に、ユーザーからアドレスを削除するのと同様に、 onを使用してアドレスからユーザーを削除することもできますexample.com/api/v1/addresses/[address_id]/users/[user_id]

Address と User の関係 (@Aliostad が構成としての関連付けと呼ぶもの) 自体がリソースであり、リソース自体を削除せずにアクセスしたり削除したりできます。

于 2014-06-10T10:21:36.930 に答える
2

持ってて問題ない

example.com/api/v1/sites

加えて

example.com/api/v1/users

特にそれぞれがルート集合体のようです。

したがって、関連付けが(サイトとユーザーの間の)集約ではなく合成である場合、それらをルート URL フラグメントとして使用することは問題ないだけでなく、正しいことでもあります。

于 2013-09-04T16:13:27.747 に答える