create
ãšupdate
ã¢ã¯ã·ã§ã³ã§$resource
ãæ¡åŒµããããšã¯å¯èœã§ããïŒ
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
ã¢ã¯ã·ã§ã³ããªãŒããŒã©ã€ãããŠãidãnullã®å Žåã¯create
ãåŒã³åºããidãèšå®ãããŠããå Žåã¯update
ãåŒã³åºãããšãã§ããŸããïŒ
ä»ã®äººã¯ããããã©ã®ããã«æ©èœããååãä»ããããã¹ããã«ã€ããŠç°ãªãæèŠãæã£ãŠããŸãã ããã¯ã©ãïŒ
æŽæ°-> PATCHïŒéšåæŽæ°ïŒ
眮æ-> PUTïŒãªãœãŒã¹ã眮æïŒ
äœæ-> POSTïŒæ°ãããªãœãŒã¹ãäœæïŒ
ããå°ãäžã«ã¹ã¯ããŒã«ãããšãç¬èªã®ã¡ãœãããäœæããæ¹æ³ã«ã€ããŠæ¬¡ã®äŸãèŠã€ãããŸãã
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ããªãã®ææ¡ã¯ãäžè¬çãªæ¹æ³ã§ã³ãŒãã£ã³ã°ããã®ãé£ããå€ãã®è³ªåãæèµ·ããŸããIMOã å ãïŒ
äœæããã³æŽæ°ã¢ã¯ã·ã§ã³ã䜿çšããŠ$ resourceãæ¡åŒµããããšã¯å¯èœã§ããïŒ
- ä¿åãšäœæã®éãã¯äœã§ããïŒ
- æŽæ°ã«äœ¿çšãããŠããHTTPåè©ã«ã€ããŠãããã¯ãšã³ããç°ãªãã°æèŠãç°ãªãããã§ãã PUTãPOSTãPATCHã䜿çšãããŠããã®ãèŠãŸããã
idãnullã®å Žåã¯createãåŒã³åºããidãèšå®ãããŠããå Žåã¯updateãåŒã³åºãããã«ãä¿åã¢ã¯ã·ã§ã³ããªãŒããŒã©ã€ãããããšãã§ããŸããïŒ
id
ã©ã®ããã«èå¥ããŸããïŒ
ããŸããŸãªããã¯ãšã³ãã«ãã£ãŠããŸããŸã«ã¢ãããŒãããããã®ã®äžè¬çãªè§£æ±ºçãæ±ããŠããããã«æãããã®ã§ãããã§æåã®è¡åæ¹éãäœã§ãããã¯ããããŸããã
RESTãå®è£ ããéã®èª²é¡ã¯ãRESTãšåãããã«å€åããå Žåã«èŠãããŸãã ããã¯èšã£ãŠããAngularJSããŒã ããããã©ã®ããã«è§£æ±ºããããã«ã€ããŠã®ã¬ã€ãã³ã¹ãæäŸããããšãé¡ã£ãŠããŸãã çŸæç¹ã§ã¯ãäŸã¯ãããŸãã«èŠããŸãã
@ pkozlowskiãžã®å¿ç-ãªãŒãã³ãœãŒã¹ïŒ
save
ãšcreate
ã®éãã save
ã¯ããªãœãŒã¹ãäœæãããšãã«POSTãããªãœãŒã¹ãå€æŽãããšãã«PUTããŸãã create
ã¯ãPOSTãšãªãœãŒã¹ã®äœæã®ã¿ã䜿çšããŸãã@shlenskyã®å©ããåããŠãç§ã¯ãã®äŸãäœæããŸããïŒ
resource.js
(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);
}());
CreditCard.js
(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ããã¯ç§ãå°ããããšããŠããæ£ç¢ºãªè³ªåã§ã:-)
äœæ/æŽæ°ã®éããç¥ãã«ã¯ãåé¡ãããã«è€éã«ããããçš®ã®IDè¡šèšãå°å ¥ããå¿ èŠããããŸãã ãŸããIDãå ¥åãããŠããªãå Žåããªããžã§ã¯ãã¯ä¿åãããªããšæ³å®ããŸãã
@jansorenããŒã ããã®çŸåšã®ã¬ã€ãã³ã¹ã¯æ確ã ãšæããŸãã$ resourceã«ã¯ãã»ãšãã©ã®RESTfulããã¯ãšã³ãã«é©ããããã©ã«ããä»å±ããŠããŸãã ã·ãŒã³ãããã»ã©æ確ã§ãªãå Žåã¯ãã«ã¹ã¿ã /è¿œå ã¡ãœããã®åœ¢åŒã§æ¡åŒµãã€ã³ãããããŸãã $ resourceã¯éåžžã«æ¡åŒµå¯èœã§ãããççŽã«èšã£ãŠã$ httpã«åºã¥ããŠã©ãããŒã®ãããª$ resourceãæ§ç¯ããã®ã¯éåžžã«ç°¡åãªã®ã§ã$ roesoureã®äžéšãšããŠèãããããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ããã£ããã£ããããšã¯æå³ããããŸããã
ããã©ã«ãã§ã¯ãIMO $ resourceã«ã¯ãå€æ°ã®ããã¯ãšã³ã/ã·ããªãªã«å ±éãããã®ã ããå«ãŸããååãªãã¬ãã¯ã¹ãã€ã³ããæ®ããŠãããããšããŸããã¯ãªãããã¯ãšã³ã/ã·ããªãªïŒãŸãã¯ã³ã³ã»ã³ãµã¹ããªãç¶æ³ïŒã«æ¡åŒµã§ããããã«ããå¿ èŠããããŸãã
method
ã
@ caitp-äžèšã®ç§ã®äŸã§ã«ããŒãããŠããŸãïŒ
resource.prototype.$save = function() {
if (this.id) {
return this.$update();
} else {
return this.$create();
}
};
@ pkozlowski-ãªãŒãã³ãœãŒã¹-ç§ã¯ããããŸã æ¹åããå¯èœæ§ããããšèšã£ãŠããã ãã§ãã ãããŠãngResourceã®ããã¥ã¡ã³ãã次ã®ããã«è¿°ã¹ãŠãããŠã£ãããã£ã¢ãåç
§ããŠããã®ã¯å¥åŠã ãšæããŸãã ãªãœãŒã¹ãæŽæ°ããããã®PUTãšããªãœãŒã¹ãäœæããããã®POSTã PUTãngResourceã«æšæºãšããŠå®è£
ãããŠããªãã®ã¯ãªãã§ããïŒ ïŒç§ã®æåã®è³ªåã«æ»ãïŒ
éçºè
ã¯ãããåçŽãªå Žåã§ããæ§ææ¹æ³ãåãå
¥ããåŸåããããŸãã
PUTãšPOSTã®éãã¯ãäœæããã®ãæŽæ°ããã®ãã§ã¯ãªãããªãœãŒã¹ãç·šéããã®ãããªãœãŒã¹ã®åãç·šéããã®ããšããããšã§ãã RFC 2616ããïŒ
PUTã¡ãœããã¯ãå²ãŸãããšã³ãã£ãã£ãæå®ãããRequest-URIã®äžã«æ ŒçŽãããããšãèŠæ±ããŸãã
...察...
POSTã¡ãœããã¯ããªã¯ãšã¹ãã«å«ãŸãããšã³ãã£ãã£ããRequest-URIã§èå¥ããããªãœãŒã¹ã®æ°ããåŸå±ãšããŠãªãªãžã³ãµãŒããŒãåãå ¥ããããã«ãªã¯ãšã¹ãããããã«äœ¿çšãããŸãã
ã»ãšãã©ã®RESTfulã·ã¹ãã ã§ã¯ãããã¯æçµçã«äœæããã³æŽæ°ãããŸãããããã¯ä¿èšŒã§ã¯ãããŸããããã®ãããç§ã¯Angularã®çŸåšã®äžæ§çšèªã§ããPOSTã®save
倧ãã¡ã³ã§ãããããã«ããæå³åãã ãŸããPOSTãåŒã³åºãcreate
é¢æ°ãè¿œå ããŠããä»ã®äººãææããŠããããã«ããµãŒããŒãšã®éä¿¡ãsave
ãšåºå¥ã§ããªãããã圹ã«ç«ããªãããšã«åæããŸãã
_ããã_ãç§ã¯PUTã¡ãœãããå«ããã®ã倧奜ãã§ããPUTã¯å®çŸ©äžã¹ãçã§ããããïŒäžââèšã®ã»ã¯ã·ã§ã³9.1.2ãåç §ïŒããªã¯ãšã¹ãã®è€æ°ã®ã³ããŒã¯éåžžãåäžã®ã³ããŒãšåãçµæã«ãªããŸãã POSTã«ã¯ãã®ããããã£ããªãããµãŒããŒã¯ãªã¯ãšã¹ãã®è€æ°ã®ã³ããŒãåå¥ã«è§£éããããããã«éè€ãããªãœãŒã¹ãäœæããããšããããããŸãã ç§ã®èãã§ã¯ããæšæºãã®RESTããŒã«ããã¯ã¹ã«ã¯éè€ããªãç·šéã«ãŒããå°ãªããšã1ã€ããã¯ããªã®ã§ãããã¯å«ãã䟡å€ãããã®ã«ååã§ãã
ç§ã䜿çšãã2ã€ã®ããã¯ãšã³ãRESTãªãœãŒã¹ã®å®è£ ã«ã¯ãPUTãå«ãŸããŸãã
Route::resource
ã¡ãœããã®ããã©ã«ãéšåãšããŠPUT /resource/{resource} -> update
ããããŸããPUT /resource/{resource} -> update
éåžžã«ãã䌌ããããã³ã°ããããŸããããã«ãããã«ããäœçŸãã®ã«ãŒãã£ã³ã°ã©ã€ãã©ãªã¯ãã»ãŒãã¹ãŠãPUTãäžå¯æ¬ ãªã³ã¢ã¡ãœããã§ãããšèããŠããŸãã
確ãã«ãããããªãããšã¯_å£ãã_ããšã§ã¯ãããŸãããããã¹ãŠã®ããã©ã«ãã䜿çšããŠãããå®çŸ©ãããã¹ãŠã®$resource
ã«ç¬èªã®PUTãè¿œå ããå¿
èŠãããã®ã¯å¥åŠã«æããŸãã
@tdhsmith
ç§ã¯ããªãã«åæããŸããPUTã¡ãœããããããšéåžžã«èå³æ·±ãã§ããããç§ã¯åœŒããupdateããšåŒã³ãPATCHã¯ãpartial_updateãã«ãªããŸãã
ãããã®ååã¯DJangoREST FrameworkããååŸããŸããããžã§ããªãã¯ãã¥ãŒã«ã¯ã次ã®2ã€ã®æ¹æ³ããããŸãã
def updateïŒselfãrequestãpk = NoneïŒïŒ
ãã¹
def partial_updateïŒselfãrequestãpk = NoneïŒïŒ
ãã¹
ããã¯ãšã³ãRESTã®æ£ããå®è£
ã«ã¯ãæŽæ°ãå®è¡ããã¡ãœããPUTãå¿
èŠã ãšæããŸããã誰ãããããå®è£
ããŠããããã§ã¯ãªãããšãç§ã¯ç¥ã£ãŠããŸãã
ASP.NETã§ã®çŸåšã®å®è£
ã«ã¯ãPUTã¡ãœããããããŸãããããã¯ãcïŒãå³å¯ã«åæå®ãããŠãããããããã¯ãšã³ãã§å¶åŸ¡ãããŒãå®è£
ããæ¹ãç°¡åã ããã§ãã
ãã ããããŒã¿ã¢ããªã®v1ã§PUTã¡ãœãããèŠæ±ããã®ã¯ããªãäžè¬çãªããã§ãã +1ã¯ããããã®æ°è¡ã®ã³ãŒããAngularã«æšæºã§å«ããããšãå¯èœã«ããèŠåãèŠã€ããããã®ãã®ã§ãã
ã«ã¹ã¿ã ã¡ãœããã$ resourceã«è¿œå ããéåžžã«ã¯ãªãŒã³ãªæ¹æ³ã®1ã€ã«ã€ããŠã¯ã httpïŒ//kirkbushell.me/angular-js-using-ng-resource-in-a-more-restful-manner/ãåç §ããŠãã ããã
@sjatkinsç§ã«ãšã£ãŠãããã¯ããå€ãã®åé¿çã§ãã
ãŸãã$ resourceã«ã¯PUTã®ããã©ã«ããªãã·ã§ã³ãå¿ èŠã§ããããšã«åæããŸããã¬ã³ãŒããæŽæ°ããããã«ãPUTã䜿çšããå¿ èŠããããã³ã«æåã§æ§æããå¿ èŠãããã®ã¯å¥åŠã«æããŸããããã¯éåžžã«äžè¬çãªIMOã§ãã PATCHã®ããã©ã«ãã®ãªãã·ã§ã³ã«ã€ããŠã¯ãå°ãäžè¬çã§ã¯ãããŸããããè°è«ããããšãã§ããŸãããPUTã®å°ãªããšã1ã€ã¯åŠ¥åœã§ãã
ãŸãã人ã ã¯$ saveãš$ createã®éãã¯äœã§ãããããšå°ããŠããŸããã ãããšãå€å$ deleteãš$ removeã®åãéããã€ãŸãäœããããŸãããïŒ ãšã€ãªã¢ã¹ã«åé¡ã¯ãããŸãããngResourceã«ããã§ã«åé¡ããããŸãã
ãªãœãŒã¹ã¯Restã«åºã¥ããŠãããšæ³å®ãããŠããã®ã§ãhttpã®Restfulã«ãŒããçŒãä»ããããŠããªãã®ã¯ãªãã§ãã...
äŸïŒ
{
'get': {method:'GET'},
'post': {method:'POST'},
'update': {method:'PUT'},
'query': {method:'GET', isArray:true},
'delete': {method:'DELETE'}
};
ããã¯ãšã³ããç°ãªãã°ã䜿çšãã¹ãåè©ã«ã€ããŠã®æèŠãç°ãªããŸãã
$resource
ã¯äžè¬çãªãœãªã¥ãŒã·ã§ã³ãæäŸããç°¡åã«æ¡åŒµã§ããŸãã
åºæ¬çã«ã $resourceProvider.defaults.actions
ã䜿çšããŠããã©ã«ãã®ã¢ã¯ã·ã§ã³ãèšå®ã§ããŸãã
ãããææžåããã«æ®ãããšãæå³çãªãã®ãªã®ãããããšãåãªãèŠèœãšããªã®ãã¯ããããŸããã
ããã¯ãšãŠã空æ³çã§ããããã§ã¯ããªãœãŒã¹ãããäžåºŠæäŸããŸãã æ¡åŒµå¯èœãªã³ã³ããŒãã³ãã倧奜ãã§ãïŒ
ããã¥ã¡ã³ããæŽæ°ãããããã©ã«ãã®ã¢ã¯ã·ã§ã³ã«é¢ããããæ確ãªæ å ±ãè¿œå ãããŸããã ããã«ãããå¿ èŠã«å¿ããŠPUTãç°¡åã«æ§æã§ããããã«ãªããŸãã
æãåèã«ãªãã³ã¡ã³ã