現在、REST Http API を設計しています。(HATEOAS を使用して、クライアントを「シンプル」にし、API に何をすべきかを指示させる代わりに、クライアントが複雑なことをするのを避けるため...)
アプリの社会的特性により、アプリケーションとやり取りするには、ユーザーを認証する必要があり、各ユーザーはデータの「ビュー」がわずかに異なります。例としてツイッターを取り上げます。誰にとっても簡単です。
ユーザーを認証するには、簡単な OAuth を使用します。
したがって、クライアント (ios アプリ...) では、ランダムなユーザーがユーザーのリストを表示する可能性があります。
Adrien: Following
John: Not Following
Rambo: Not Following
また、別のユーザーは次のように表示される可能性があります。
Adrien: Following
John: Not Following
Rambo: Following
これを実現するための最初の解決策は、クライアント (oauth 用語では iphone/web/etc アプリ) が、認証されたユーザーがフォローしているすべてのユーザーのリストを取得し、クライアントがリストを表示するたびにそれぞれを比較することです。 「フォローしていない」または「フォロー中」を表示する必要があるかどうかを知るために、フォローしているユーザーのリストを持つユーザー。
要求/応答は次のようになります。
GET /users
Authorization: OAuth token...
[
{"id": 1, "name": "Adrien"},
{"id": 2, "name": "John"},
{"id": 3, "name": "Rambo"}
]
と
GET /users/{myid}/following
Authorization: OAuth token...
[1, 3, 25, 1210, 9]
これはかなり、ステートレスのようです。良い。
ここで、クライアント開発者の作業を楽にし、認証されたユーザーに対する各ユーザーの関係をユーザー リストの応答に直接埋め込みたい場合はどうすればよいでしょうか。
GET /users
Authorization: OAuth token...
[
{"id": 1, "name": "Adrien", "relationship": "Following"},
{"id": 2, "name": "John", "relationship": "Not Following"},
{"id": 3, "name": "Rambo", "relationship": "Following"}
]
だから、質問:
- 「ステートレス」を破るように見えますが、本当にRESTステートレス制約を破っていますか?
- 次に、API がこれを行うのは良い習慣だと思いますか?それとも悪い習慣だと思いますか?