2014-12-20 5 views
0

여러 요청 유형이있는 시스템을 설계하고 있습니다. 예를 들어, 사용자는 조직에 "가입"하거나 이벤트 (및 기타 여러 유형)에 대해 "등록"할 수 있습니다.여러 요청 유형이있는 시스템의 올바른 REST 아키텍처

그래서 나는이

GET /memberships?organization=125 
GET /registrations?event=2556 

등 시스템이 요청 시스템을 수 있도록 진화 시간이 지남에

, 사용자 첫째 요청은 관리자에 의해 승인 된 조직에 가입 할 수 있도록 , 그러면 실제 회원이됩니다. 해야,

POST /membership_requests {organization:"125",user:"200"} 
GET /registration_requests {event:"2556",user:"200"} 

질문을 구걸한다 : 마찬가지로, 사용자 등 관리자가 승인하거나 거부 이벤트,

이 중복 비즈니스 오브젝트와 디자인의 많은 리드에 등록를 요청 여러 유형을 지원할 수있는 단일 요청 시스템이 있습니까?

POST /requests {user:"200",type:"event",item:"2556"} 
  • 거꾸로 :
  • 단점 모든 요청에 ​​대해 요청에 대해 한 곳에서 쉽게 쿼리, 단일 코드 기반을 : 나는 더 이상 GET /membership_requests?organization=125 쿼리 없지만, 대신 그것은 GET /requests?type=organization&item=125

이다 할 필요가 있습니다 보다 일반적인 시스템이지만 쿼리가 이상하게 보입니다.

나는 약간의 의견을 바탕으로하지만, 한 경로에서 다른 경로로가는 영향에 대한 사람들의 경험을 찾고 있습니다.

답변

0

나는 어느 쪽이든 괜찮은 것처럼 보이므로 시스템을 더 간단하게 만들 수있는 결정 방법이 무엇입니까? 제 경험으로는 여러 가지 종류의 요청을 다르게 처리해야하는 경우 한 요청 시스템을 선택하는 것이 간단 해졌습니다. 즉

, 요청 시스템이 그 나쁜 기호 것

if(type=organisation){ 
    do this 
}else if(type=othertype){ 
    do that 
}else if (type=...){ 
} 

과 같은 코드로 끝날 가능성이있는 경우. 그러나 같은 if 문없이 동일한 코드로 모든 다른 요청 유형을 처리하려고한다면 단일 시스템이 더 간단 할 것입니다.

쿼리가 실제로 이상하지 않습니다. 요청 시스템이있는 경우 requestId로 끝나지 않으므로 type=organization&item=125request=123456이됩니다.

+0

그래, 나는 그것에 대해서도 걱정했다. 당신이 말하는 것처럼 들리 겠지만, 간단한 해결책은 없습니다. 어떤 식 으로든 상충 관계가있을 것입니다. – deitch

+0

그리고. 네,'type = organization & item = 125' (조직에 합류하라는 요청 125)는'request = 123456'과 동일하지만, 후자는 ID에 의한 GET 단일 항목이고 전자는 검색입니다. – deitch

+0

후속 조치 : 이번 주에는 알림 시스템을 구현했습니다. 사용자가 요청을 열 때마다 관리자는 승인을 요청할 때와 마찬가지로 보류중인 요청이 있음을 알립니다. 관리자가 승인하거나 거부 할 때마다 사용자는 알림을받습니다. 이로 인해 각 요청 유형마다 많은 중복 코드가 생성되었습니다. 나는 통일 된 길을 갔어야했는데 ... 아직은. – deitch

관련 문제