В общем, я бы рекомендовал не позволять им вставлять фактические sql в свои запросы
Вы можете позволить им легко отправлять where
условия в своем запросе:
<where>
<condition "field"="name" "operator"="equal" "value"="Fred"/>
</where>
или что-то подобное.
Значение для этого многократное:
- Вы анализируете каждое условие и проверяете его на правильность перед запуском
- Вы можете создавать «поддельные» поля, такие как «полное_имя», которые могут не существовать.
- Вы можете ограничить столбцы, на которые они могут поставить условия
- Вы можете изолировать пользователей от реальных изменений в вашей базовой базе данных.
Я думаю, что последний пункт на самом деле самый важный. Настанет день, когда вам нужно будет внести изменения в базовую схему базы данных. В конце концов, это произойдет. В этот момент вы по достоинству оцените наличие некоторого уровня «перевода» между тем, что отправляют пользователи, и запросами. Это позволит вам изолировать пользователей от реальных изменений в базовой базе данных.
API должен представлять «абстрагированную» версию самих реальных таблиц, которая отвечает потребностям пользователей, и изолировать их от изменений в реальной базовой базе данных.