2013-05-13 5 views
2

잠시 동안 RESTful API가 CRUD 작업을 웹 응용 프로그램의 지속 된 엔터티에 방금 노출했다고 생각했습니다. "현실 세계"에서 어떤 것을 코딩하면 곧 이것이 충분하지 않다는 것을 알게됩니다. 예를 들어, 은행 계좌 이관은 지속 된 법인 일 필요는 없습니다. /transfers/와 페이로드에서 당신이 POST 당신이 세부 사항을 지정하는 곳은 일시적인 자원이 될 수있다 :RESTful API에서 임시 리소스를 검색하는 방법

{"accountToCredit":1234, "accountToDebit":5678, "amount":10} 

여기 POST를 사용하여이 서버의 상태를 변경하기 때문에 의미가 있습니다 ($ 다른 때마다 하나 개의 계정 (10 명)으로 이동 이 POST이 발생합니다.

서버에 영향을주지 않는 경우 어떻게해야합니까? 간단한 첫 번째 대답은 GET을 사용하는 것입니다. 예를 들어, $ 100 미만인 저축 및 당좌 계정 목록을 얻고 싶습니다. 그런 다음 GET에서 /accounts/searchResults?minBalance=0&maxBalance=100으로 전화 할 것입니다. 검색 매개 변수가 최대 길이 인 GET 요청에 맞지 않는 복잡한 객체를 사용해야하는 경우 어떻게됩니까?

내 첫번째 생각은 POST을 사용했지만,이 서버의 상태를 변경하지 않기 때문에 그것에 대해 생각 후 일부는 더는 아마 PUT을해야하지만, 내 (제한적) 이해에서 나는 항상 PUT의 같은 생각 리소스를 업데이트하는 것으로 (이 검색 결과 생성과 마찬가지로) POST을 업데이트합니다. 그래서이 경우 사용해야합니까?

나는 몇 가지 정보를 제공하는 다음 링크를 발견하지만 다른 경우에 사용되어야 하는지를 나에게 분명하지 않다 :

Transient REST Representations

How to design RESTful search/filtering?

RESTful URL design for search

답변

2

I 귀하의 접근 방식에 동의한다면, 그것은 합리적인 것 같습니다 GET 때 자원을 검색하고, 하나의 제공된 링크 중 하나에서 말했다, 쿼리 문자열의 전체 지점은 검색과 같은 일을하기위한 것입니다. 또한 멍청한 방식으로 리소스를 업데이트하려고 할 때 PUT이 더 적합하다는 데 동의합니다. 몇 번이나 요청을 했더라도 결과는 동일합니다.

그래서 일반적으로, 나는 당신이 제안한대로 그것을 할 것입니다. 당신은 "검색 자원으로이 볼 수

PUT /api/search 

: 당신이 GET 요청의 최대 길이에 의해 제한하는 경우 지금, 당신은 같은 URI에서는, JSON에 매개 변수를 전달 POST 또는 PUT을 사용할 수 있습니다 "여기서 새로운 매개 변수를 보냅니다. 해결 방법과 같이 보이고 REST가 URI의 동사를 피하는 것에 대해 걱정할 수도 있습니다. 글쎄, 동사를 사용하는 것이 여전히 수용적이고 RESTful 인 경우는 거의 없습니다. 계산 또는 변환이 결과를 생성하는 데 관련된 경우 (이에 대한 자세한 내용은 this 참조).

추신. 나는이 해결 방법이 여전히 RESTful하다고 생각하지만 그렇지 않더라도 REST는 강박 관념이 아니라 궁극적 인 목표이다. 실용 주의적이며 깨끗한 API 디자인을 유지하는 것이 RESTful이 아닌 경우도 있습니다.

관련 문제