このシナリオに対処するためのより良い方法があるかどうか疑問に思っています。簡単ですが、ヒット数を念頭に置いて、クエリを排除しようとしています。
のリストがあり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 return404 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 つのデータベース呼び出しを行うほうがよいのでしょうか?
あなたの考え?