Я занимаюсь разработкой API, и я хотел бы задать несколько вопросов о том, как наилучшим образом защитить доступ к данным.
Предположим, API разрешает доступ артистам. У исполнителей есть альбомы, в которых есть песни.
Пользователи API имеют доступ к подмножеству всех художников. Если пользователь вызывает API с запросом какого-либо исполнителя, легко проверить, разрешено ли ему это делать.
Далее, если пользователь запрашивает альбом, API должен проверить, принадлежит ли альбом исполнителю, к которому ему разрешен доступ. Доступ к песням означает, что API должен проверить альбом, а затем исполнителя, чтобы получить доступ.
В терминах базы данных я смотрю на растущее число объединений между таблицами для каждого добавляемого дополнительного слоя. Я не хочу делать все эти объединения, и я также не хочу хранить идентификатор пользователя везде, чтобы ограничить количество объединений.
Чтобы обойти это, я предложил следующий подход.
API предоставляет пользователю ссылку на объект, например объект художника. Затем пользователь может запросить этот объект исполнителя для альбомов, который возвращает объект списка. Объект списка может быть пройден, и из него могут быть получены объекты альбома. Аналогично, из объекта альбома может быть получен объект списка песен, и из этого отдельные объекты песни.
Поскольку API доверяет объекту Artist, он также доверяет любым объектам (в данном случае альбомам), которые пользователь получает от него, без дальнейших проверок. И так далее для всех других объектов. Поэтому я делегирую безопасность / доверие объектам по цепочке.
Я хотел бы спросить вас, что вы об этом думаете, что хорошего или плохого в этом, и, конечно же, как бы вы решили эту «проблему».
Во-вторых, как бы вы подошли к этому, если бы API был RESTful? Мой подход кажется менее применимым в этом случае.