Ответ 1
Вопросы безопасности в стороне, так что вы можете изменить структуру базы данных, не затрагивая своих клиентов. Кроме того, плохо сформированные запросы связывают ваш сервер, а не клиенты.
Сегодня на многих сайтах есть API, которые позволяют пользователям получать данные с сайта как XML или JSON с помощью HTTP-запроса GET. Flickr и del.icio.us являются примером сайтов с API. Эти API требуют от сервера доступа к базе данных, а затем выводят результат как XML или JSON.
Зачем нам этот перевод? Почему бы просто не создать пользователя в базе данных (например, MySQL)? Пользователю будет предоставлен ограниченный доступ к базе данных, только разрешение SELECT и только определенные таблицы и определенные столбцы в этих таблицах. Разве это не было бы намного более эффективным для сервера (ему не пришлось бы обрабатывать HTTP-запрос), и разработчикам было бы проще, кто мог бы теперь получить доступ к тем данным, которые им нужны, как им это нужно.
Вопросы безопасности в стороне, так что вы можете изменить структуру базы данных, не затрагивая своих клиентов. Кроме того, плохо сформированные запросы связывают ваш сервер, а не клиенты.
Можете ли вы запретить вредоносному человеку создавать суперкомплексный SQL-запрос, который привяжет процессор базы данных на 100%? Можете ли вы запретить многим невинным программистам создавать неэффективные запросы, которые никогда не будут оптимизированы, что будет делать то же самое?
API:
Кодирование в контракте - с помощью API-интерфейсов вы можете изменить все, что находится за ними, не затрагивая их использование аутсайдерами. Здесь вы связываете их не только с MySQL, но и с вашей схемой
Кэширование. Предоставление им любого запроса почти устраняет любую возможность кэширования этих прогнозируемых запросов по HTTP, которые могут быть использованы. Это, вероятно, способ номер один, чтобы удалить часто узкое место номер один, базу данных.
Безопасность. При таком подходе было бы легко отказаться от атаки, даже случайно. Не говоря уже о том, что вам нужно будет предоставить доступ к слою данных, который часто помещается в ограниченную зону, где безопасность может быть затянута.
Юзабилити. Не каждый разработчик или хочет понять ваш внутренний домен. Вероятно, они предпочитают предварительно испеченный прямой и самообучающийся API. Крайним примером может быть предоставление привилегий менеджеров db, а не отчетов.
Переносимость тоже. Скажем, по причинам лицензирования и масштабированию вы делаете бизнес-решение переходить с MSSQL на MySql. Синтаксис не совсем то же самое, и ваши клиенты все должны изменить свой код.
Намного лучше просто откупорить все это и сохранить абстрагирование реализации. Чьи вы говорите, что вы не сохраняете состояние приложения, используя обученные обезьяны, царапающие метки на бутылках?
Безопасность - причина номер 1, но я надеюсь, что эти причины очевидны. Другим веским основанием является пользователь, связывающий драгоценные ресурсы с плохими запросами.
Кроме того, хотя, почему слой абстракции?
Почему использовать API - это вопрос, почему использовать абстракции, и мой список здесь едва царапает поверхность.
веб-сервер предоставляет вам буфер, который вы можете контролировать. если на вашем сервере sql есть какая-то ошибка, вы не хотите, чтобы он был открыт непосредственно в Интернете. true, если у веб-сервера есть ошибки, это может быть так же плохо... кроме того, что у вас есть дополнительный слой между данными и миром.
-don
Это не столько "почему бы и нет", сколько "почему ты должен". Обработка HTTP-запросов - это небольшой штраф за полный контроль над тем, какие данные вы разрешаете или запрещаете пользователям получать доступ. Кроме того, если в будущем будет изменяться характер/количество/уровень безопасности данных, вам будет лучше с ответом JSON/XML, чем разрешить общий доступ.
То, что нужно учитывать, когда вы думаете о проблемах безопасности, состоит в том, что очень сложно предвидеть все возможные векторы, которые кто-то может использовать для атаки на вас. Например, действительно ли вы уверены, что получили права доступа к базе данных, чтобы люди не могли испортить вещи?
Поэтому вы хотите попытаться ограничить действия только тем, что вы знаете, чтобы быть хорошим, а не просто пытаться ограничить то, что вы знаете, чтобы быть плохим. Это можно сделать с помощью веб-службы, которой вы обладаете абсолютный контроль, но трудно разрешить кому-либо напрямую обращаться к базе данных и быть уверенным, что вы защищены.
API - это своего рода Wrapper вокруг базы данных. Пользователи ничего не знают о внутреннем представлении данных в базе данных, ему нужно только отправить несколько унифицированных запросов и получить на него единый ответ. Как и когда данные будут обрабатываться на сервере - это не его головная боль.