RESTful $ resource em AngularJS

$ resource é um serviço útil que o ajuda a interagir com uma API REST de seu aplicativo AngularJS.

$ resource por padrão lida com essas cinco operações REST para (1) obter uma lista de itens, (2) obter um item, (3) inserir um item, (4) atualizar um item e (5) excluir um item:

(1) GET /collection
(2) GET /collection/:id
(3) POST /collection
(4) PUT /collection/:id
(5) DELETE /collection/:id

No entanto, isso pode não ser suficiente para você. O Rails permite que você defina ações adicionais em seus recursos , mas como conectá-los a $ resource?

Acontece que a solução é bem simples:

angular.module('myApp')
.factory('Station', ['$resource', 'apiUrl', ($resource, apiUrl) ->
Station = $resource(apiUrl + '/stations/:collectionRoute:id/:memberRoute', {
id
: '@id'
collectionRoute
: '@collectionRoute'
memberRoute
: '@memberRoute'
}, {
# Define methods on the Station object

# /stations/autocomplete?term=Pra
# Invoke as: Station.autocomplete({term: 'Pra'})
autocomplete
: {method: 'GET', isArray: true, params: {collectionRoute: 'autocomplete'}}

# /stations/123/location
# Invoke as: Station.location({id: 123})
location
: {method: 'GET', params: {memberRoute: 'location'}}
})
return Station
])

$ recursos vincula automaticamente id, collectionRoutee memberRouteparâmetros para o URL, e todos os outros parâmetros como parâmetros de consulta ( ).?param=

Conectando os parâmetros collectionRoute / memberRoute a métodos personalizados, agora você pode chamar como uma ação de coleção e como uma ação de membro.Station.autocomplete({term: 'Pra'})Station.location({id: 123})

PS Kudos para http://www.bennadel.com/blog/2433-Using-RESTful-Controllers-In-An-AngularJS-Resource.htm , que foi a fonte original para esta dica.