2011-03-08 4 views
2

우리가 책 엔티티REST를 통해 GET 쿼리에 추가 정보를 추가하는 좋은 전략은 무엇입니까?

/books 

에서 듣기와 클라이언트가 우리가 책에 할인 혜택을 제공을 시작한다고 가정 일반적인

GET /books/{id} 

에서 책을 얻을 수 있습니다 제공하는 편안한 API를 제공 감안할 때 우리의 가장 경계하는 구매자들. 이 구매자에게는 할인 코드가 주어지며 해당 코드는 책 가격을 낮 춥니 다. 할인 코드를 사용하여 쿼리에 대한 응답이

GET /books/4 
{"id":4, "price":"24.95", "yourPrice":"19.95"} 

우리가 알아 낸 얻을 수있는 백엔드 처리하지만, 될 수있다

따라서, 일반적인 반응은

GET /books/4 
{"id":4, "price":"24.95"} 

될 수있다 클라이언트가 편안한 API를 통해 할인 코드를 제출하는 가장 좋은 방법은 무엇입니까?

일부 도서는 할인 대상이며 다른 도서는 할인 대상입니다. 할인은 광범위한 것 (모든 것에서 20 % 할인)이 아니라 특정 코드 (또는 고객/코드 조합)에 대한 특정 가격으로 매핑됩니다.

은 우리가 고려했습니다

  • 이 URL을 해결하는데 투입

    GET/코드/{someCode}/책/{ID}

  • 헤더 값에 코드를 추가

  • 쿼리 문자열 사용

    GET/books? cod e = myCode

  • 다른 건?

편집 : 우리의 목표는 일회용 코드를 구현하지 않는 것입니다. 대신, 이러한 할인 코드는 고정 된 책 세트에 대해 고정 된 횟수만큼 사용될 수 있습니다.

답변

2

쿼리 변수를 사용하는 것이 좋습니다. 난 그냥 RESTful 웹 서비스 책,이 지역 내 주요 참조 보았고, 그들은 말 :

를 사용하여 쿼리 변수는 인수가 알고리즘에 연결되고 ...이 URI를 다른 경우 제안 쿼리 변수에 만 있으면 을 의미하며 이들은 동일한 기본 알고리즘에 입력 의 다른 집합입니다.

귀하의 할인 코드는 할인 알고리즘의 입력 값입니다.

찰스

+0

"쿼리 변수 만 사용하여 알고리즘에 연결되는 인수를 제안하십시오."물론 여기에 해당됩니다. 감사. – gmoore

1

멱등하지 않은 것을 제출하려는 경우 GET 대신 POST를 사용하는 것이 좋습니다. 클라이언트가 코드를 두 번 이상 사용할 수 없기를 바랄 것입니다.

+0

실제로 코드 만료는 여기에서 문제가되지 않습니다. 이를 반영하기 위해 질문을 업데이트하겠습니다. 멱등 원에 대한 귀하의 발언은 상관없이 여전히 관련이 있습니다. – gmoore

1

URL 또는 헤더 값에 추가하는 항목은 모두 가로 채어 다른 사용자가 자신의 할인 ID를 '허위로 만들 수 있도록 허용합니다. 1 접근 방식은 ID를 간단한 HTTPS로 암호화 할 수 있도록 새로운 POST 호출을 도입하는 것입니다. 게시 된 데이터는 discountID 또는 customerID처럼 간단 할 수 있습니다.

: -

추가 죄송 마이클, 당신은 이미 예를 들어, 사용자가 그 책이 자동으로 적절한 할인과 함께 그 책을 반환 검색 그렇게 할 때

+0

POST를 사용하여 책 목록을 가져 오는 작업을 수행하는 것이 잘못되었습니다. 코드 보안 유지에 대한 좋은 지적. – gmoore

0

당신은 테이블의 코드를 등록 할 수 있습니다 :)했다

GET /books/{id} 
하여 사용자가 검색 그래서 {코드} - 사용자가이 테이블 {사용자}에 항목을 추가합니다

POST /register/{code} 

몇 가지 코드를 추가 할 수 있습니다

은 해당 항목을 사용하여 할인을 적용합니다. 나는 당신이 이미 {code} - {book} 사이에 어떤 관계가 있다고 생각합니다.

관련 문제