2011-01-06 5 views
2

"일반적으로 지속되지 않는"REST-ify 행동/개념에 대한 조언과 경험을 찾고 있습니다. 또는 부작용을 유발할 수 있습니다.일반적으로 지속될 것으로 생각되지 않는 모델링 행동/개념에 대한 조언

먼저 REST-ful-ness에 대한 완전한 테스트가 없다는 것을 알았습니다. 실제로는 상관하지 않습니다. CRUD-over-the-Web의 REST 개념은 매우 직관적이며 액세스 할 수있는 대부분의 데이터에서 잘 작동합니다. 동시에, 나는 누군가가 완벽하게 휴식을 취할 수있는 방법에 관한 성경에서 벗어나는 것에 대해 걱정하지 않는다. 나는 실용적이고 REST 직관적 인 것 사이의 최선의 절충안이 그다지 잘 맞지 않는 경우를 찾고 있습니다. 분명히 일관성이 주요 목표이지만 직관적 인 태도는이를 보장하는 데 도움이됩니다.

이 점을 감안할 때, 내가 무엇을했는지에 대한 세부 사항을 살펴 보겠습니다.

REST는 본질적으로 자원 지향적이기 때문에 일반적으로 유지되는 것을 모델링하기 쉽습니다. 일반적으로 유지되지 않는 행동/개념, 특히 부작용이 있거나 순전히 변형적인 동작/개념을 모델링하는 방법이 분명하지 않습니다.

예를 들어, stackoverflow.com 질문. 생성, 업데이트, 읽기 및 삭제가 가능합니다. 모든 사람이 그와 관련이 있으며 REST에서는 모두 의미가 있습니다.

하지만 이제 번역과 같은 것을 고려해보십시오. 예를 들어 영어 문장을 스페인어로 번역하는 서비스 용 REST API를 만들고 싶습니다.

번역 시나리오를 해결하는 데는 최소한 두 가지 방법이 있습니다. 나는 수 :

  • 는 "번역 인스턴스"(지속 할 일이 없지만, 할 수있는)의 창조로 번역 호출에서 찾는 경우 포스트/번역 (에 즉, create)는 실제로 많은 의미를가집니다. 특히 번역 서비스에서 번역 할 URL이 필요한 경우 (해당 URL의 내용이 시간이 지남에 따라 변경 될 수 있기 때문에) 특히 그렇습니다.

  • 번역본을 실제로 알려진 답변의 더 큰 사전을 쿼리하는 행위로 간주합니다.이 경우 GET/Translation (즉, 읽기)이 더 적절할 수 있습니다. 번역 서비스에서 문장의 텍스트 만 번역하면됩니다. 아무도 정적 문장의 번역이 시간이지나면서 바뀔 것으로 기대하지 않습니다. GET이 캐시 할 수 있다고 주장 할 수도 있습니다.

이와 같은 딜레마 (AN SMS 또는 이메일을 전송, 예를 들어) 차적 부작용이 다른 작업에 가입자를 수 이하 공통 데이터의 지속성과 연관된다.

내 접근 방식은 본질적으로 이러한 사례를 "주문"하여 모든 사람이 주문한 것처럼 모든 것을 조사하는 것입니다. 더 일반적으로 말하자면, 동사를 명사 (번역 순서)로 변환하는 것일뿐입니다. 이러한 명사는 REST의 한 방법 인 것처럼 보입니다.

일반적으로 지속성이 있다고 생각되지 않는 행동/행동 모델링에 더 잘 접근하고 더 직관적 인 방법으로 공유 할 수 있습니까?

답변

2

"한 번 이상해볼까요?"- 아마도 테스트 할 수 있습니까?

예제에서 - 동일한 텍스트를 두 번 번역하도록 요청하면 어떻게됩니까? 별로.SMS를 두 번 보내는 것은 나쁜 일이 될 수 있습니다.

+0

제안 해 주셔서 감사합니다. 나는 그것이 때때로 도움이되는 시험이라는 데 동의한다. 그러나 내가 언급 한 것처럼 번역 할 웹 페이지의 URL을 전달하면 예 - 두 번 수행하면 결과가 달라질 수 있습니다 (예 : 요청을 한 시간 사이에 페이지가 변경됨). 그것은 서비스의 세부 사항에 달려있다. – kvista

+0

다른 결과를내는 것이 반드시 GET을 사용하는 것에 대한 이유는 아닙니다. 결국 변경된 페이지에서 GET하면 그렇게 할 수 있습니다. 그래서 우리는 Last-Modified와 Expires가 있습니다. GET 또는 GET 토론은 재현성 그 자체보다 부작용에 관한 것입니다. – telent

1

설명하는 두 가지 옵션은 유효한 옵션이며 다른 옵션보다 나은 시나리오가 이미 강조 표시되어 있습니다. POST를 "프로세싱 리소스"와 함께 사용하는 유일한 다른 옵션을 제안합니다. 예 :

POST /translator?from=en&to=fr 
Content-Type: text/plain 
Body: The sentence to be translated 
=> 
200 OK 
La phrase à traduire 

"리소스 처리"에 대한 좋은 점 중 하나는 영구적 인 부작용이있을 수도 있고 그렇지 않을 수도 있다는 것입니다. 분명히 단점은 중개자가 응답을 캐시 할 수 없다는 점입니다.

+0

제안에 감사드립니다. 저는 이것이 번역 같은 동사의 명사와 유사하다고 생각합니다. 그래서 제가 제시 한 첫 번째 옵션과 일치합니다. 그리고 저는 여러분에게 불리한 점에 대해서 동의합니다. – kvista

+0

@Kelly 내 머리의 차이점은 POST/Translations는 변환 결과가 들어있는 새 리소스에 대한 URL이있는 Created 및 Location 헤더를 반환한다는 것입니다. 이 새 리소스는 일시적으로 존재할 수 있지만 보조 GET에 의해 액세스됩니다. –

+0

제안을 감사하지만, POST/Translations가 결과를 반환 할 것이라는 점을 직접적으로 암시하지 않는 곳에서 내가 제안한 첫 번째 글 머리표보다 매력적이지 않은 것으로 보입니다 (보조 GET 필요 없음). 보조 GET이 필요한 경우 일시적으로 답변하지 않는 한 모델의 무국적자 측면을 위반할 것이라고 생각합니다. (당신이 제안하는 것일 수 있습니다). 다시 한번 감사드립니다. – kvista