2016-03-21 3 views
1

Я разрабатываю мобильное приложение, с базой данных в Node.js. Пользователи будут взаимодействовать с платформой почти исключительно через мобильное приложение. В качестве составной части бэкенда я использую несколько API, которые будут использоваться мобильным приложением - например: API для создания учетной записи, отправки сообщения, публикации изображения и т. Д.Лучшая практика для проверки ввода API в Node.js?

Что лучше всего подходит для проверить вход API?

Моя мысль заключается в создании модуля для каждого API, целью которого является извлечение, дезинфекция и проверка соответствующих атрибутов из http-запроса. Например, API-интерфейс «создать учетную запись» будет иметь связанный с ним модуль AccountCreationRequest с методом validate, в котором будут определены все проверки, зависящие от учетной записи. Затем каждая конкретная проверка может выполняться библиотеками, такими как express validator и validator.

exports.AccountCreationRequest = { 

    init: function(request) { 
    ... extract attributes ... 
    }, 

    sanitizeAndValidate: function() { 
    ... use express-validator/validator on 
    attributes such as username, email, etc ... 
    }, 

    isValid: function() { 
    ... return result of validation ... 
    } 
}; 

Затем, когда бэкенд API получает запрос,

var accountCreationRequest = AccountCreationRequest.init(httpRequest); 
accountCreationRequest.sanitizeAndValidate(); 

if (accountCreationRequest.isValid()) { 
    ... store in database and notify client of success ...    
} else { 
    ... notify client of failure ... 
} 

Меня беспокоит то, что N APIs потребует N запроса-проверки-модулей. Однако, поскольку каждый API уникален, я не думаю, что есть много возможностей для повторного использования кода.

ответ

2

Если вы используете экспресс, вы можете сделать что-то вроде

app.use('/private', function(req, res, next) { 
    if (/*some condition to check for authentication*/) { 
     next(); 
    } else { //unauthorized 
     res.status(401).send('not authorized, please authenticate'); 
    } 
}); 

, который будет фильтровать все под/частный путь через условия аутентификации. Вы также можете использовать подстановочные знаки в пути, если хотите.

Смежные вопросы