Angular.js: рдореЙрдбрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $resource рдореЗрдВ PUT рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдЕрдХреНрддреВре░ 2014  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: angular/angular.js

рдХреНрдпрд╛ $resource рдХреЛ create рдФрд░ update рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

Example: 
{ 'get':    {method:'GET'},
  'save':   {method:'POST'},
  'create': {method:'POST'},
  'update': {method:'PUT'},
  'query':  {method:'GET', isArray:true},
  'remove': {method:'DELETE'},
  'delete': {method:'DELETE'} };

рдХреНрдпрд╛ рдЖрдИрдбреА рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдкрд░ save рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП create save рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдФрд░ рдЖрдИрдбреА рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ update рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ?

ngResource high public api not core inconvenient feature

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

var notes = $resource('/notes/:id', null, {
  'update': { method:'PUT' }
});

notes.prototype.$save = function() {
    if (this.id) {
        return this.$update();
    } else {
        return this.$create();
    }
};

рд╕рднреА 20 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cuz рджреВрд╕рд░реЛрдВ рдХреА рдЕрд▓рдЧ рд░рд╛рдп рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рд╣реИ?

рдЕрджреНрдпрддрди -> рдкреИрдЪ (рдЖрдВрд╢рд┐рдХ рдЕрджреНрдпрддрди)
рдмрджрд▓реЗрдВ -> рдкреБрдЯ (рд╕рдВрд╕рд╛рдзрди рдХреЛ рдмрджрд▓реЗрдВ)
рдмрдирд╛рдПрдВ -> рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ (рдПрдХ рдирдпрд╛ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдПрдВ)

рдпрджрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рдФрд░ рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓реЗрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЦреБрдж рдХрд╛ рддрд░реАрдХрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рдП:

var notes = $resource('/notes/:id', null, {
  'update': { method:'PUT' }
});

@jimmywarting - рдЖрдкрдХрд╛ рдЙрддреНрддрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рди рдХрд┐ рд╕рдорд╛рдзрд╛рдиред

var notes = $resource('/notes/:id', null, {
  'update': { method:'PUT' }
});

notes.prototype.$save = function() {
    if (this.id) {
        return this.$update();
    } else {
        return this.$create();
    }
};

@jansoren рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рдЙрдард╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХреЛрдб рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛, рдЖрдИрдПрдордУред рднреВрддрдкреВрд░реНрд╡ред:

рдХреНрдпрд╛ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдПрдХ рдЕрджреНрдпрддрди рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде $ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

  • рд╕реЗрд╡ рдФрд░ рдХреНрд░рд┐рдПрдЯ рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реЛрдЧрд╛?
  • рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреИрдХрдПрдВрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛ рд░рд╣реА HTTP рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рдп рдорд┐рд▓реА рд╣реИред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ PUT рдХреЗ рд╕рд╛рде-рд╕рд╛рде POST рдФрд░ PATCH рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдИрдбреА рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡ рдПрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдФрд░ рдЖрдИрдбреА рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ?

  • рдЖрдк id рдкрд╣рдЪрд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдорд╛рдВрдЧ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреИрдХрдПрдВрдб рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рдЖрд░рдИрдПрд╕рдЯреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬрдм рдпрд╣ рдЙрддрдирд╛ рд╣реА рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рддрдирд╛ рд╡рд╣ рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдВрдЧреБрд▓рд░рдЬреЗрдПрд╕ рдЯреАрдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рд╕рдордп рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдЕрд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВред

@pkozlowski-opensource рдХреЗ рдЬрд╡рд╛рдм :

  • save рдФрд░ create рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ред save рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рддреЗ рд╕рдордп рдкреЛрд╕реНрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдВрд╕рд╛рдзрди рдмрджрд▓рддреЗ рд╕рдордп PUT рдХрд░реЗрдЧрд╛ред create рдХреЗрд╡рд▓ POST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рдПрдХ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдПрдЧрд╛ред
  • рдореИрдВ рд╕рдВрдкреВрд░реНрдг рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╕рдордп PUT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЬрдмрдХрд┐ рдореИрдВ рд╕рдВрдкреВрд░реНрдг рд╕рдВрд╕рд╛рдзрди рдХреЗ рднрд╛рдЧреЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PATCH рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдкреИрдЪ рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдбреЛрдореЗрди рд╕рдВрдЪрд╛рд▓рд┐рдд рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

@shlensky рдХреА рдорджрдж рд╕реЗ рдореИрдВрдиреЗ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рд╣реИ:

рд╕рдВрд╕рд╛рдзрди.рдЬреЗрдПрд╕

(function () {
    var resource = function ($resource) {
        var resource = {};
        resource.create = function(url) {
            return createResource($resource, url)
        }
        return resource;
    };

    var createResource = function($resource, url) {
        var resource = $resource(url, getParamDefaults(), getActions());
        resource.prototype.$save = function() {
            if (this.id) {
                return this.$update();
            } else {
                return this.$create();
            }
        };
        return resource;
    };

    var getParamDefaults = function() {
        var paramDefaults = {
            id:'<strong i="17">@id</strong>'
        };
        return paramDefaults;
    };

    var getActions = function() {
        var actions = {
            'create': {method:'POST'},
            'update': {method:'PUT'},
            'all':    {method:'GET', isArray:true}
        };
        return actions;
    };

    angular.module('myModule').factory('resource', resource);
}());

рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб.рдЬреЗрдПрд╕

(function () {

    var CreditCard = function (resource) {
        return resource.create('card/:id');
    };

    angular.module('myModule').factory('CreditCard', CreditCard);
}());

myController.js

(function () {
    var myController = function ($scope, CreditCard) {
        // get
        var creditCard = CreditCard.get({id:'abc123'}, function() {
            console.log(creditCard);
        });

        // all
        var creditCards = CreditCard.all(function() {
            console.log(creditCards);

            // update
            var creditCard = creditCards[0];
            creditCard.name = 'changed';
            creditCard.$save(function() {
                console.log(creditCard)
            });
        });

        // create
        var creditCard = new CreditCard();
        creditCard.name = 'new';
        creditCard.$save(function() {
            console.log(creditCard)
        });
    };
    angular.module("myModule").controller("myController", myController);
}());

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рд╡рд╣ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдХреЛ рдмрдирд╛рдиреЗ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

@caitp рдпрд╣ рд╡рд╣реА рд╕рдЯреАрдХ рдкреНрд░рд╢реНрди рд╣реИ рдЬреЛ рдореИрдВ рдкреВрдЫрдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ :-)

рдХреНрд░рд┐рдПрдЯ/рдЕрдкрдбреЗрдЯ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрдИрдбреА рдиреЛрдЯреЗрд╢рди рдкреЗрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдорд╛рдорд▓реЛрдВ рдХреЛ рдФрд░ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдФрд░ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ рдпрджрд┐ рдЙрд╕рдореЗрдВ рдЖрдИрдбреА рдирд╣реАрдВ рднрд░реА рдЧрдИ рд╣реИред

@jansoren рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдо рд╕реЗ рд╡рд░реНрддрдорд╛рди рдорд╛рд░реНрдЧрджрд░реНрд╢рди рд╕реНрдкрд╖реНрдЯ рд╣реИ: $resource рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд░реАрд╕реНрдЯрдлреБрд▓ рдмреИрдХ-рдПрдВрдб рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рджреГрд╢реНрдп рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд╡рд╣рд╛рдВ рдХрд╕реНрдЯрдо/рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБ рд╣реИрдВред $resource рдмрд╣реБрдд рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ $resource рдХреЛ $http рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд░реИрдкрд░ рдХреА рддрд░рд╣ рдмрдирд╛рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ $roesoure рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

IMO $resource, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рд╡рд╣реА рдЪреАрдЬреЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмреИрдХрдПрдВрдб/рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдВ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рдлреНрд▓реЗрдХреНрд╕ рдкреЙрдЗрдВрдЯ рдЫреЛрдбрд╝ рджреЗрдВ рддрд╛рдХрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рдЕрдзрд┐рдХ "рд╡рд┐рджреЗрд╢реА" рдмреИрдХрдПрдВрдб/рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛ рд╕рдХреЗрдВ (рдпрд╛ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдХреЛрдИ рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рд╣реИ)ред

рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдпрджрд┐ method рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдореЛрдб рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХреЗред

@caitp - рдпрд╣ рдКрдкрд░ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ:

 resource.prototype.$save = function() {
            if (this.id) {
                return this.$update();
            } else {
                return this.$create();
            }
        };

@ pkozlowski-opensource - рдореИрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдФрд░ рдореБрдЭреЗ рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ngResource рдкреНрд░рд▓реЗрдЦрди рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ; рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PUT рдФрд░ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП POSTред PUT рдХреЛ ngResource рдореЗрдВ рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? (рдореЗрд░реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╢реНрди рдкрд░ рд╡рд╛рдкрд╕)
рдЬрдм рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддрд░реАрдХреЗ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рд╡реИрд╕реЗ PUT рдФрд░ POST рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рд╕рдВрд╕рд╛рдзрди рдпрд╛ рд╕рдВрд╕рд╛рдзрди рдХреЗ рдмрдЪреНрдЪреЗ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрд░рдПрдлрд╕реА 2616 рд╕реЗ :

рдкреБрдЯ рд╡рд┐рдзрд┐ рдЕрдиреБрд░реЛрдз рдХрд░рддреА рд╣реИ рдХрд┐ рд╕рдВрд▓рдЧреНрди рдЗрдХрд╛рдИ рдХреЛ рдЖрдкреВрд░реНрддрд┐ рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдз-рдпреВрдЖрд░рдЖрдИ рдХреЗ рддрд╣рдд рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

...рдмрдирд╛рдо...

POST рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдЗрдХрд╛рдИ рдХреЛ рдЕрдиреБрд░реЛрдз-рдпреВрдЖрд░рдЖрдИ рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рд╕рдВрд╕рд╛рдзрди рдХреЗ рдПрдХ рдирдП рдЕрдзреАрдирд╕реНрде рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗ ...

рдЕрдзрд┐рдХрд╛рдВрд╢ RESTful рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрдирд╛рдирд╛ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВ POST рдХреЗ рд▓рд┐рдП Angular рдХреЗ рдореМрдЬреВрджрд╛ рдиреНрдпреВрдЯреНрд░рд▓ рдЯрд░реНрдо save рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдордЬрдмреВрдд рдирд╣реАрдВ рд╣реИ рдЕрд░реНрде рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗред рдореИрдВ рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ create рдлрд╝рдВрдХреНрд╢рди рдЬреЛ POST рдХреЛ рдХреЙрд▓ рднреА рдХрд░рддрд╛ рд╣реИ, рд╕рд╣рд╛рдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рдиреЗ рдиреЛрдЯ рдХрд┐рдпрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рд╕рдВрдЪрд╛рд░ save рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

_рд╣рд╛рд▓рд╛рдБрдХрд┐_, рдореИрдВ рдПрдХ PUT рд╡рд┐рдзрд┐ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдБ: PUT рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ idempotent рд╣реИ (рдКрдкрд░ рдЦрдВрдб 9.1.2 рджреЗрдЦреЗрдВ) рдЗрд╕рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреА рдХрдИ рдкреНрд░рддрд┐рдпреЛрдВ рдХрд╛ рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рд╣реА рдкреНрд░рддрд┐ рдХреЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред POST рдореЗрдВ рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдХреНрд╕рд░ рд╕рд░реНрд╡рд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреА рдХрдИ рдкреНрд░рддрд┐рдпреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдПрдВрдЧреЗред рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ, рдпрд╣ рд╕рдорд╛рд╡реЗрд╢рди рдпреЛрдЧреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА "рдорд╛рдирдХ" рдЖрд░рдИрдПрд╕рдЯреА рдЯреВрд▓рдмреЙрдХреНрд╕ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЧреИрд░-рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдВрдкрд╛рджрди рдорд╛рд░реНрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдмреИрдХ-рдПрдВрдб рдЖрд░рдИрдПрд╕рдЯреА рд╕рдВрд╕рд╛рдзрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдПрдХ рдкреБрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ:

рд╕рд╛рде рд╣реА, рд╡рд╣рд╛рдВ рдореМрдЬреВрдж рд╕реИрдХрдбрд╝реЛрдВ рд░реВрдЯрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рдЧрднрдЧ рд╕рднреА PUT рдХреЛ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдХреЛрд░ рд╡рд┐рдзрд┐ рдорд╛рдирддреЗ рд╣реИрдВред

рджреА, рдпрд╣ _broken_ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рддреНрдпреЗрдХ $resource рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ PUT рдЬреЛрдбрд╝рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

@tdhsmith
рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдПрдХ рдкреБрдЯ рд╡рд┐рдзрд┐ рд░рдЦрдирд╛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рдореИрдВ рдЙрд╕реЗ "рдЕрдкрдбреЗрдЯ" рдХрд╣реВрдВрдЧрд╛, рдФрд░ рдПрдХ рдкреИрдЪ "рдЖрдВрд╢рд┐рдХ_рдЕрдкрдбреЗрдЯ" рд╣реЛрдЧрд╛

рдореИрдВрдиреЗ рдпреЗ рдирд╛рдо рдбреАрдЬреЗрдВрдЧреЛ рдЖрд░рдИрдПрд╕рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рд▓рд┐рдП рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ:

рдбреАрдИрдПрдлрд╝ рдЕрдкрдбреЗрдЯ (рд╕реНрд╡рдпрдВ, рдЕрдиреБрд░реЛрдз, рдкреАрдХреЗ = рдХреЛрдИ рдирд╣реАрдВ):
рдЙрддреНрддреАрд░реНрдг

def рдЖрдВрд╢рд┐рдХ_рдЕрдкрдбреЗрдЯ (рд╕реНрд╡рдпрдВ, рдЕрдиреБрд░реЛрдз, рдкреАрдХреЗ = рдХреЛрдИ рдирд╣реАрдВ):
рдЙрддреНрддреАрд░реНрдг

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреИрдХ-рдПрдВрдб рдЖрд░рдИрдПрд╕рдЯреА рдХреЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдкреБрдЯ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
ASP.NET рдореЗрдВ рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ PUT рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ c# рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмреИрдХ-рдПрдВрдб рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдРрдк рдХреЗ v1 рдореЗрдВ рдПрдХ рдкреБрдЯ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣реИ рдирд╛? +1 рдХреБрдЫ рд╕рдореНрдореЗрд▓рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЛрдгреАрдп рдореЗрдВ рдХреЛрдб рдХреА рдЗрди рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдирдХ рд╕рдорд╛рд╡реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

$resource рдореЗрдВ рдЕрдкрдиреА рдХрд╕реНрдЯрдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдл рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП http://kirkbushell.me/angular-js-using-ng-resource-in-a-more-restful-manner/ рджреЗрдЦреЗрдВред

@sjatkins рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдХрд╛рдордХрд╛рдЬ рдХрд╛ рдЕрдзрд┐рдХ рд╣реИред


рдореИрдВ рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ $resource рдореЗрдВ PUT рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PUT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, IMOред рдкреИрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реЛ, рд▓реЗрдХрд┐рди рдкреБрдЯ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЙрдЪрд┐рдд рд╣реИред

рд╕рд╛рде рд╣реА рд▓реЛрдЧ рдкреВрдЫ рд░рд╣реЗ рдереЗ рдХрд┐ $save рдФрд░ $create рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реЛрдЧрд╛ред рдареАрдХ рд╣реИ, рд╢рд╛рдпрдж $delete рдФрд░ $remove рдХреЗ рдмреАрдЪ рд╕рдорд╛рди рдЕрдВрддрд░, рдпрд╛рдиреА рдХреЛрдИ рдирд╣реАрдВ? рдореБрдЭреЗ рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ ngResource рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣реИред

рд╕рдВрд╕рд╛рдзрди рдХреЛ рд░реЗрд╕реНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рд╕рд┐рд░реНрдл http рд░реЗрд╕реНрдЯрдлреБрд▓ рд░реВрдЯ рдмреЗрдХ рдХрд┐рдП рдЧрдП рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИрдВ ...

рдЙрджрд╛рд╣рд░рдг:

{
    'get':    {method:'GET'},
    'post':   {method:'POST'},
    'update': {method:'PUT'},
    'query':  {method:'GET', isArray:true},
    'delete': {method:'DELETE'}
};

рдХреНрдпреЛрдВрдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреИрдХрдПрдВрдб рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рдп рд╣реЛрддреА рд╣реИред
$resource рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╣реИред

рдореВрд▓ рд░реВрдк рд╕реЗ, рдЖрдк $resourceProvider.defaults.actions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЫреЛрдбрд╝рдирд╛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдпрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдирд┐рд░реАрдХреНрд╖рдг рдерд╛ред

рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд▓реНрдкрдирд╛ рд╣реИ рдХрд┐, рдореИрдВ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдПрдХ рдФрд░ рдмрд╛рд░ рджреВрдВрдЧрд╛ред рдореБрдЭреЗ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдШрдЯрдХ рдкрд╕рдВрдж рд╣реИрдВ!

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдкрд░ рд╕реНрдкрд╖реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ PUT рдХреА рдЖрд╕рд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jtorbicki picture jtorbicki  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tdumitrescu picture tdumitrescu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

piu picture piu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cmplank picture cmplank  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ashish91 picture ashish91  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ