2012-06-24 3 views
1

REST 사양에 따라 응용 프로그램을 설계하고 있지만 다음 구조를 구성하는 방법을 잘 모르겠습니다.프로젝트에 사용자를 추가하는 백본 REST 요청?

기본 CRUD 프로세스를 따르는 프로젝트가 있습니다. 또한 기본 CRUD 프로세스를 따르는 사용자도 있습니다. 그러나 나는 프로젝트에 사용자를 추가하는 작업을하고 요청을하는 방법을 모르겠습니다.

사용자가 여러 프로젝트를 가질 수 있으므로 어떤 종류의 PUT 요청이어야한다고 생각하지만 프로젝트 ID는 실제로 사용자 모델의 일부가 아닙니다.

PUT /users/project/3 

이 접근 방법에 대한 제안 사항은 무엇입니까?

답변

2

사용자가 많은 프로젝트를 가질 수 있고 프로젝트에 많은 사용자가있을 수있는 것처럼 들립니다. 이 경우 해당 관계를 관리하는 것이 참여자 테이블에 user_id 및 project_id가있는 참여자와 같은 이름을 지정할 수있는 조인 테이블을 사용하는 것이 가장 좋습니다.

그런 다음 사용자 또는 프로젝트를 통해 참가자를 관리할지 여부를 선택할 수 있습니다. 나에게 프로젝트 참여자를 관리하는 것이 타당하며, 새 참여자를 작성하기 때문에 POST입니다.

POST /projects/:project_id/participants 

페이로드에는 user_id가 포함됩니다.

+1

좋아요, 제가 생각하기에 이것은 누락 된 부분입니다. 프로젝트/사용자 간의 연관 자체는 POST 요청입니다. 나는 codeigniter에서 REST 핸들러를 수정해야 할 것이다. 그러나 이것은'POST/projects' 호출을 위해 기본적으로 나에게 많은 문제를 해결할 것이다. 나는 프로젝트 컨트롤러에서'index_post()'함수를 가지고있다. 거기에는'user_post()'핸들러도 있습니다. 이것은 디자인 관점에서 많은 의미를 가지며, 원한다면'project_post()'핸들러를 가진 사용자 컨트롤러를 가질 수도 있습니다. – Rob

1

프로젝트 ID가 사용자 모델의 일부가 아니면 프로젝트 모델의 일부인 사용자 ID 배열을 의미합니다 ... 맞습니까? (즉, 백본

PUT /projects/(projectid)/users/(userid) 

그러나, 어쩌면 당신은 그들이 서비스의 소비자가 필요로하지 않는 경우 해당 URL을 지원할 필요가 없습니다 그래서 나는이 프로젝트에 사용자를 추가하는 것이 적절하다고 생각);

PUT /projects/(projectid) 

을하고 아약스 포스트 호출은 "이 프로젝트를 업데이트"요청의 일부로 사용자의 목록이 포함됩니다 : 어쩌면 당신은 단지 하나의 엔드 포인트가 프로젝트를 업데이트 할.

UI에 따라 백본의 URL 형식을 사용할 수도 있습니다. URL의 첫 번째 양식은 "사용자 y를 프로젝트 y에 추가"(예 : 관리자가 "현재 사용자를 현재 프로젝트에 추가"를 클릭 한 경우 등)와 같은 요청에만 유용합니다.

URL의 두 번째 형식은 사용자 목록, 프로젝트 이름 등을 포함하여 프로젝트 도매업을 업데이트하는 데 사용할 수있는 형식입니다. 그것은 "프로젝트 편집"보기입니다.

var ProjectModel = Backbone.Model.extend({ 
    defaults: { 
     "project_name": "", 
     "users: [0] 
    }, 

    urlRoot: "/myrestapi/projects", 

    url: function() { 
     return this.urlRoot + "/" + this.cid; 
    } 
}); 

백본이 발생하게이 모델에 요청을 저장 URL에 (POST를 PUT?) : 프로젝트의 모델 상태를 나타내는 포스트 데이터와

/myrestapi/projects/(cid) 

을 :

{ "project_name": "foo", "users": [15, 18, 42] } 

다음은 서버의 데이터 저장소에 대한 업데이트를 트리거하는 REST 서비스입니다.

+0

괜찮습니다.하지만이 부분이 다소 혼란 스럽습니다. 프로젝트 속성을 업데이트하기 위해 put/projects/(projectid)를 이미 사용하고 있다면 이것은 나에게 별개의 과정처럼 보입니다.아니면 PUT 함수가 URL이 형성되는 방식이나 수신되는 매개 변수에 따라 다른 경우에 대한 논리를 가져야한다는 의미입니까? – Rob

+0

또한 backbone.js를 사용하여 이러한 유형의 요청을 보내려면 어떻게해야합니까? 나는 여기서 사용자 또는 프로젝트 모델을 실제로 업데이트하지 않는다. 사용자 목록이있는 프로젝트가있는 경우 컬렉션에 해당 사용자를 추가해야하므로 사용자에 대한 POST 요청과 비슷합니다. 사용자가 이미 db에 있으며 단지 추가 된 것입니다. 계획. – Rob

+0

@Rob * PUT * 함수는 URL에 따라 다른 논리를 가질 수 있다고 생각합니다. 전체 REST API를 지원할 것인지 또는 Backbone 응용 프로그램에 실제로 필요한 URL인지 여부에 따라 다릅니다. 예를 들어 내 업데이트를 참조하십시오. – McGarnagle

관련 문제