Restful factory for AngularJS.
bower install restify<script src="bower_components/restify/dist/restify.min.js">
# declare restify as a dependency of your application moduleapp=angular.module('yourModule',['restify'])
# create a service by injecting restify and using its factory function# note: you should probably create one service for the whole api# and then pass it all over the placeapp.factory'API', ['restify',(restify)-># restify # gets a base url and a configuration block# returns a Restified Objectrestify'/api' , (config)-># add your endpointsconfig.add('/users/:id/images')
config.add('/stores/:name/branches/:id')
config.add('/stores/:name/products/:id')
config.add('/stores/:name/images')
]
# inject your service and start playingapp.controller'MyCtrl',['$scope', 'API', ($scope, API)-># GET /api/usersAPI.users.$get().then (users)->$scope.users= users
$scope.userImages= (user)-># provided that user.id == 123# GET /api/users/123/imagesuser.images.$uget().then (images)->user.images= images
$scope.create= (user)-># PUT /api/users$scope.users.$post(user)
$scope.save= (user)-># provided that user.id == 123# PUT /api/users/123user.$put()
$scope.changePassword= (user, password)-># provided that user.id == 123# PATCH /api/users/123user.$patch({password: password})
$scope.remove (user)->user.$delete().then ()->$scope.users=_.without($scope.users,user)
]
<ul><ling-repeat="user in users"><inputtype="text" ng-model="user.name"><inputtype="text" ng-model="user.email"><buttonng-click="save(user)">Save</button><buttonng-click="remove(user)">Remove</button><buttonng-click="getImages(user)">See Images</button><ul><ling-repeat="image in user.images"><imgsrc="{{image.src}}" alt="{{image.alt}}"></li></ul></li></ul>Owned properties are ment to be used internally, don't mess with them!
- $$url
- $$route
- $$parent
- $$headers
- $$requestInterceptor
- $$responseInterceptor
- $get(): getting the response and restifying it
- $uget(): getting the response without restifying it
- $delete():
- $post([data]): If data is not provided then this object is sent stripped from functions or Restified objects.
- $patch([data]): If data is not provided then this object is sent stripped from functions or Restified objects.
- $put([data]): If data is not provided then this object is sent stripped from functions or Restified objects.
Configuration methods(see below)
- $setHeaders(headers)
- $setResponseInterceptor(callback)
- $setRequestInterceptor(callback)
All restified object inherits configuration from its parent chain and may override it
# parent chain: api > users > userusers=api.usersuser=users.$id(123)
api.$setHeaders({'X-AUTH-TOKEN':123})
user.$get() # sends X-AUTH-TOKEN: 123users.$setHeaders({'X-AUTH-TOKEN':456})
user.$get() # sends X-AUTH-TOKEN: 456api.$get() # still sends X-AUTH-TOKEN: 123# note: $id creates a new restified objectsameUser=users.$id(123)
user !== sameUser # true# note: every request data creates a new restified objectuser.$get.then(sameUser)->
user !== sameUser # true