このシナリオに対処するためのより良い方法があるかどうか疑問に思っています。簡単ですが、ヒット数を念頭に置いて、クエリを排除しようとしています。
のリストがありBooks
ます。このブックに割り当てられたユーザーだけがブックやその他のコンテンツを表示できます。その基本的な API 呼び出し。/Books/
、/Books/Chapters/
、など。アクセス許可は、データベースのエントリに/Books/Chapters/Pages/
関連付けられています。Books
Books
、「章,
ページ」などはすべて別のテーブルにあります。ユーザー権限は別のテーブルに格納されます。テーブルはこんな感じ。
UserID, BookID
--------------
101 1
102 1
102 2
...
ユーザー情報は、API 呼び出し自体 (基本認証) から取得されます。401 Unauthorized
要求された が存在する場合、API は を返す必要Book
がありますが、ユーザーにはその へのアクセス許可がありませんBook
。「Book does not exist, then it should return
404 Not found」をリクエストした場合。
通常、まずクエリを使用して、そのユーザーと要求された のアクセス許可を確認する必要がありBook
ます。そのユーザーのユーザー権限テーブルにレコードが存在する場合は、別のクエリを実行してBook
、「Chapter」などを取得する必要があります。
condition that checks for the existence of the record for this user for the requested
現在、これら 2 つのクエリを権限テーブルの 'WHERE EXISTS Book' と組み合わせています。そのため、レコードは、ユーザー権限テーブルにレコードがある場合にのみ返されます。
しかし、これでは、Book
が存在しないか、ユーザーにアクセス許可がないかどうかはわかりませんが、ユーザーのアクセス許可を個別に確認するために 1 つのデータベース呼び出しを削減することはできます。401
これではとの区別がつかない404
。
区別でき、単一のクエリでこれを行うより良い方法はあり401
ます404
か? それとも、2 つのデータベース呼び出しを行うほうがよいのでしょうか?
あなたの考え?