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

Другие вопросы по тегам