AngularJS: Как мне обрабатывать RESTful API с помощью токена безопасности и пользовательских методов?
Скажем, у меня есть RESTFul API, который имеет стандарт GET
, POST
, PUT
, а также DELETE
методы для него, но у меня также есть другие методы, которые настраиваются для определенных типов объектов, и помимо этого мне требуется маркер безопасности.
поэтому URL для этой службы может выглядеть так:
GET / PUT / POST / DELETE http://sample.com/api/User/123?token=ABCDEF1234
а также
ПОЛУЧИТЕ http://sample.com/api/User/GetUsersByStatus?token=ABCDEF1234¶m1=blah¶m2=foo
или же
POST http://sample.com/api/User/DoSomethingCrazy?token=ABCDEF1234
где последние два делают некоторые пользовательские функции. Может быть, это что-то для сброса пароля или для клонирования пользователя и возврата записи, я не знаю. Просто кастомные "мелочи".
Каков наилучший способ справиться с этим с Angular? Я видел утилиту $resource, но, похоже, она предназначена только для стандартных методов REST, и я не уверен, как расширить ее так, чтобы ее понял следующий разработчик Angular.
1 ответ
Если я правильно вас понимаю, то, по-вашему, вы спрашиваете, как сделать так, чтобы методы ресурса автоматически включали ваш токен??? Если это правильно, то вы можете сделать это несколькими способами. Во-первых, вы можете просто расширить предопределенные методы ресурсов и запечь параметры, которые будут применяться при каждом вызове, или вы можете определить свои собственные методы.
Кроме того, при вызове метода, если параметры не были предварительно квалифицированы, они попадут в строку запроса.
Ниже приведен пример кода, который я написал для реализации CakePHP. Я передаю в действие для каждого из предопределенных методов и мой собственный метод инициализации.
angular.module('myApp.cakephp.services', ['ngResource']).
factory('CommentSvc', function ($resource) {
return $resource('/cakephp/demo_comments/:action/:id/:page/:limit:format', { id:'@id', 'page' : '@page', 'limit': '@limit' }, {
'initialize' : { method: 'GET', params: { action : 'initialize', format: '.json' }, isArray : true },
'save': { method: 'POST', params: { action: 'create', format: '.json' } },
'query' : { method: 'GET', params: { action : 'read', format: '.json' } , isArray : true },
'update': { method: 'PUT', params: { action: 'update', format: '.json' } },
'remove': { method: 'DELETE', params: { action: 'delete', format: '.json' } }
});
})
надеюсь это поможет
--dan