2012-01-07 1 views
2

RESTful 서비스를 구축하려고하는데 몇 가지 문제가 있습니다. 가상의 RESTful 서비스의 예를 들어 이러한 문제 (질문)에 대해 설명하겠습니다.RESTful에 대한 이해. 복잡한 동작을위한 URI

예를 들어, 내 사이트에 "뉴스"서비스가 필요합니다. 뉴스는 지역 뉴스 및 글로벌 뉴스와 같은 다양한 유형이 될 수 있습니다. 뉴스는 관리자가 추가합니다. 사용자는 지역 및 글로벌 뉴스를 개별적으로 또는 전체적으로 볼 수 있습니다. 뉴스는 페이지별로 표시됩니다. 사용자는 정확한 뉴스를 볼 수 있습니다.

그래서, 나는이 작업을 위해 이러한 동사 - 명사 테이블을 구축했습니다 :

GET /news    - Get all news 
POST /news    - Create news 
GET /news/{id}   - Show the news with id={id} 
PUT /news/{id}   - Edit the news with id={id} 
GET /news/{type}/{page}/{per_page} - Get news page #{page} of type {type} 
GET /news/{page}  - Get news page #{page} of both types 

그래서, 문제가 :

1) {페이지}과 {ID}을 구별하는 방법? 어쩌면 {id}는 숫자 일 수도 있지만 {page} - 'p'로 시작되는 문자열 (예 : 'p1')?

2) 사용자는 "per_page"값을 변경할 수 있습니다 페이지에. 너무 복잡하지 않습니까? /news/{type}/{page}/{per_page}? 그것이 어떻게 단순화 될 수 있는가?

3)이 서비스에서 브라우저의 URL은 어떻게 보이게해야합니까? URL은 위의 표의 URI와 정확히 일치하지 않습니까? 예 :

/news - Viewing news (1st page with default 'per_page' and default 'type') 
/news/{type} - Viewing news (1st page with default 'per_page' and type={type}) 
/news/{id} - Viewing exact news with id={id} 
/news/{type}/{page}/{per_page} - Viewing exact page of news of exact type. 

4) 추가 기능. 예를 들어 필터 검색 (날짜, 작성자 또는 제목 별 뉴스 가져 오기). 이것을 REST로 실현하는 방법은 무엇입니까? 필터 객체 (xml 또는 json)를 어떻게 전송해야합니까? 필터 결과가있는 페이지의 URL을 만드는 방법은 무엇입니까? /news/{date:12.12.2012,author:'admin'} 또는 더 나은 무엇입니까?

내 거친 영어로 죄송합니다. 문법 및 기타 실수가있는 경우 언제든지 수정하십시오.

미리 감사드립니다.

+0

나는 REST에 너무 익숙하지 않지만 모든 뉴스를 표시하기 위해 'all'이라는 의사 유형의 뉴스를 소개하는 방법에 대해 - 마지막 URL (/ news/{page})은/news/모두/{page}? 이렇게하면 ID와 충돌하지 않습니다. {page}/{per_page}는 2/10 (2 페이지, 10 페이지) 대신 10-20 개가 될 수 있으므로 {start} - {end} 20)? 나에게 자의식이있는 것 같아. – Seramme

+0

@ Seramme, 고마워. '/ news/all /'는 그러한 경우에 정말로 도움이됩니다. '{start} - {end}'는 소리가 좋지만 페이지를 계산하는 것이 클라이언트 측 작업이라는 의미입니다. –

답변

2

유형, 페이지 및 per_page에 일반 매개 변수를 사용해야한다고 말하고 싶습니다. Type, Page 및 Per_Page는 고유 한 리소스를 나타내지 않고 News Resources 컬렉션에 대한 필터입니다. 그래서 추가 필터링에 대한 동일

  • /news
  • /news/{id}
  • /news?type={type}&page={page}&per_page={per_page}

을 할 것입니다.

당신이 정상적으로 요청 PARAMS를 사용할 수 고든http://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm#sec_6_2

+0

나는 초심자이므로, 질문이 있습니다. 정상적으로,'/ such/a/thing /'과'? param = value & param2 = value' 것을 모두 파싱해야합니까? –

+0

@Innuendo 예, '/ thing'은 자원을 나타내며,'? param = foo'는 해당 자원의 특정 상태를 나타냅니다. – Gordon

+0

참고 : {type} (+ 'all')은 uri 부분에 포함될 수 있지만 일반 페이지 매개 변수처럼 페이지 매김이 더 잘 수행됩니다. –

1

으로 확인해야합니다. REST는 단지 깨끗하고 멋진 URL을 의미하지 않는다는 것을 기억하십시오.

그래서 uri에 ids와 type 매개 변수를 남겨 두지 만, 페이지 매김 매개 변수는 쿼리 문자열을 추가합니다.

다른 uri 부품을 구별하기 위해 Google gdata에 사용 된 패턴을 사용할 수 있습니다. 즉,매개 변수 앞에 이름이 있습니다.

/news 
/news/id/{id} 
/news/type/{type} 

서버 측에서 일부 구문 분석을 사용하면 많은 매개 변수, 선택적 매개 변수를 추가하고 정확한 순서를 지정하지 않을 수 있습니다.