Я разрабатываю REST API в качестве бэкэнд-приложения для Android-приложения для запуска. В настоящее время в стартапе имеется веб-версия их службы с пользователями около 10 тыс. Пользователей. У меня есть несколько сомнений относительно дизайна веб-API:Проектирование RESTful API
- Как я могу защитить свой API?
Я хочу, чтобы только клиент Android получал доступ к API и никому другому. Один из способов - отправить зашифрованный токен из front-end и дешифровать на внутреннем сервере. Есть ли другой путь? Кроме того, как мне его реализовать?
- Как сделать мой API быстрым и эффективным?
Существует особая конечная точка, к которой обращаются очень часто. Однако информация об этой конечной точке не меняется. Поэтому запросы, которые выполняются в течение короткого периода времени, скорее всего, возвратят тот же ответ. Как быстрее реагировать на такие запросы? Будет ETag
и Last-Modified
сделают эту работу?
- Должен ли я доверять данным от моего клиента?
В настоящее время, когда я получаю запрос с некоторым параметром только проверкой я выполняю по запросу, чтобы проверить, если параметр null
или нет. Напр. Если запрос имеет mobile
в качестве параметра, я проверяю только, присутствует ли в запросе параметр mobile
. Я не выполняю другие проверки, такие как проверка длины if mobile
меньше 10, а затем исключение.
EDIT: Любой, кто считает, что этот вопрос является «слишком широким», пожалуйста, оставьте комментарий, так что я могу изменить этот вопрос и добавить все необходимые детали.
Вопрос широкий, но вот некоторые отзывы. 1. «безопасный» может [означать много вещей] (http://en.wikipedia.org/wiki/Information_security#Definitions). Рассмотрите, какие ресурсы вы защищаете, и как они доступны. Для конкретной задачи, о которой вы говорили, возможно, попробуйте установить сеансы по HTTPS и передать токен, но это может быть целый вопрос сам по себе. 2. Существуют факторы, которые влияют на латентность запроса API. Попробуйте использовать инструмент профилирования, чтобы определить, сколько времени тратится. Кэширование - хороший вариант, но подумайте, где это делается (база данных ?, session ?, app?). 3. Нет, никогда. – pieman72
@ pieman72 1. Безопасным я имел в виду, что только клиент android может получить доступ к API. Я думаю, что токен будет работать нормально. 2. Не могли бы вы предложить хороший инструмент профилирования для измерения производительности API? 3. Да, я не должен доверять данным от клиента и выполнять все необходимые проверки. –
Вам понадобятся разные инструменты в зависимости от вашего стека приложений, но похоже, что вы используете Django, поэтому, возможно, это: [https://code.djangoproject.com/wiki/ProfilingDjango](https://code.djangoproject .com/вики/ProfilingDjango) – pieman72