RESTful インターフェイスには、開始点として既知の URL が 1 つあります。そこから、応答で提供されるハイパーメディア コントロールによって、他のすべてのアクションとエンティティにアクセスする必要があります。その意味で、URL 構造はまったく重要ではなく、クライアントにとっても重要ではありません。それらは完全に不透明で (たとえば、http://bit.ly/9xhUggのように)、クライアントは引き続き機能します。
ここにいくつかの有用な読み物があります:
そうは言っても、サーバー実装の観点からは、提案したような構造を使用する方が簡単です。何かのようなもの:
GET /
<myapplication href="/">
<users href="/users"/>
<posts href="/posts"/>
<tags href="/tags"/>
</myapplication>
GET /users
<users href="/users">
<user username="johndoe" href="/users/1234"/>
<user username="janedoe" href="/users/1235"/>
<next href="/users?page=2"/>
<search href="/users">
<name type="string" cardinality="required"/>
</search>
</users>
GET /users?page=2
<users href="/users">
<user username="bobgeldof" href="/users/1236"/>
<user username="biancajager" href="/users/1237"/>
<next href="/users?page=3"/>
<prev href="/users"/>
<search href="/users">
<name type="string" cardinality="required"/>
</search>
</users>
GET /users/1236
<user username="bobgeldof" href="/users/1236">
<posts-liked href="/users/1236/posts"/>
<tags-followed href="/users/1236/tags"/>
<users-followed href="/users/1236/users"/>
<like-post href="/users/1236" method="PUT">
<post type="URL" cardinality="required"/>
</like-post>
<follow-tag href="/users/1236" method="PUT">
<tag type="URL" cardinality="required"/>
</follow-tag>
<follow-user href="/users/1236" method="PUT">
<user type="URL" cardinality="required"/>
</follow-user>
</user>
上記で重要なことは、投稿がいいね! されているか、タグまたはユーザーがフォローされている場合、投稿、タグ、またはユーザーの URI が ID ではなくパラメーターとして送信されるということです。ところで、これらの操作に PUT を使用する理由は、アクションがべき等であるためです。そうでない場合は、代わりに POST を使用します。
GET /users/1236/posts
<liked-posts href="/users/1236/posts">
<post href="http://stackoverflow.com/questions/11566436" title="What's the RESTful way to structure an URL for user interactions with other entities?">
<unlike href="/users/1236/posts?href=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F11566436" method="DELETE"/>
</post>
...
<next href="/users/1236/posts?page=2"/>
</liked-posts>
GET /users/1236/users
<followed-users href="/users/1236/users">
<user username="biancajager" href="/users/1237">
<unfollow href="/users/1236/users?href=%2Fusers%2F1237" method="DELETE">
</user>
<user username="Jorge Pedret" href="http://stackoverflow.com/users/201092/jorge-pedret">
<unfollow href="/users/1236/users?href=http%3A%2F%2Fstackoverflow.com%2Fusers%2F201092%2Fjorge-pedret" method="DELETE"/>
</user>
<next href="/users/1236/users?page=2"/>
</followed-users>
上記の (真に RESTful であることに加えて) 私が本当に気に入っているのは、ID の代わりに URL を使用しているため、他のシステムの投稿やユーザーを気に入ってフォローできることです。:)