2013-04-13 1 views
2
내 REST API는
public function lockUserAction($slug) 
{} // "lock_user"  [PATCH] /users/{slug}/lock 

패치 요청은 잘못된 URL로 보낼 수 있습니다

그래서 가진 사용자를 잠급니다

/api/users/2/lock 

에 패치 요청을 전송 요청의이 종류를 사용할 수 있도록 구성

id = 2. 이것은 angular.js 내의 내 휴식 서비스입니다

angular.module('UserService',['ngResource']).factory('User', function($resource){ 
    var User = $resource('/api/users/:id', 
     {}, 
     { 
      list: { method: 'GET' }, 
      lock: { method: 'PATCH' } 
     } 
    ); 
    return User; 
}); 

목록은 작동하지만 잠금 기능이 작동하지 않습니다. 콘솔 지문 :

PATCH /api/users 405 (Method Not Allowed) 

나는 URL을 /api/users 대신 /api/users/2/lock를 참조 오류 메시지에서이

$scope.lock = function(user){ 
    user.$lock(); 
} 

처럼 호출합니다. 이것은 정상적인 행동입니까? 물론 GET 요청과 PATCH 요청 만 제외하고 /api/users에있는 목록은 /api/users/{slug}/lock에만 허용됩니다.

/api/users가 호출되고/api/users/{slug}/lock이 아닌 이유에 대한 아이디어. 어떤 아이디어가 이것을 고치는 방법?

+0

패치 : 잠금에 대해 각 알고하자보다

? 당신은 자신의 HTTP 동사를 구성하고 있습니까? 괜찮습니다.하지만 서버 측에서 어떤 일이 벌어지고 있는지보십시오. 어떤 이유로이 요청에 대해 405 오류를 반환합니다. 한 가지만 들어오는 URL에 : id 매개 변수가 있는지 확인하십시오. – jpsimons

+1

@darkporter http://tools.ietf.org/html/rfc5789 – jusio

+1

@darkporter 나 자신의 HTTP 동사를 만들지 않습니다. 나는 패치를 사용하는 백엔드에서 FOSRestBundle을 사용한다. 예, 잘못된 URL이 호출 된 것으로 보입니다. –

답변

4

$lock으로 전화를 걸면 이전처럼 동일한 URL을 호출 할 생각이났습니다. 일부 추가 경로 요소가 있습니다. 또한 각도가 :id param의 값인 지 알 수있는 방법이 없습니다.

var User = $resource('/api/users/:id/:action', //add param to the url 
     {}, 
     { 
      list: { method: 'GET' }, 
      lock: { method: 'PATCH',params:{action:"lock",id:"@id"}} //set param value, so angular knows where to send request, @id refers to user id in json representation of user 
     } 
    ); 
+1

편집이 부분적으로 작동하기 전에 답을했는데 동작 매개 변수가 누락되었습니다 호출 된 url (/ api/users/2 405 (Method Not Allowed))에서. 현재 답변에는 내 질문과 같은 문제가 있습니다. 다시/api/users 405 (Method Not Allowed) –

+0

죄송합니다. 매개 변수 대신 param 키가 있어야 하나 이상 오타가 있었고 코드를 시도 했으므로 작동해야합니다. 유일한 문제는 사용자 프로젝트의 속성 이름이 무엇인지 확실하지 않기 때문에 '@id'값이 될 수 있습니다. – jusio

+1

완벽한, 감사합니다!) –

관련 문제