문제

Agavi Framework는 정보 업데이트를 위해 CREATE 및 POST에 대한 PUT 요청을 사용합니다. 일반적으로 휴식은 다른 방식으로 사용됩니다 (종종 전체 데이터 레코드를 대체하는 동안 게시물 추가 정보를 참조하십시오).

내가 올바르게 이해한다면, 중요한 문제는 Put이 Idempotent이고 Post에는이 요구 사항이 없다는 것입니다. 따라서, 특히 ORM이 ID를 기본 키로 사용하고 새 레코드의 ID를 알려지지 않을 때 특히 새 레코드를 만드는 방법 (즉, 다중 요청이 여러 가지 레코드의 창조물로 이어지지 않습니다) 클라이언트에게 (데이터베이스에 자극적이기 때문에) 요청의 일부가 될 수는 없습니다. Agavi는 PUT 요청에 대해 이에 비추어 Idempotence의 요구 사항을 어떻게 유지합니까?

감사.

도움이 되었습니까?

해결책

Put은 생성 및 완전한 레코드 업데이트에 모두 사용할 수 있습니다. 게시물은 일반적으로 부분 업데이트 및 관련 작업 및 리소스에 대한 URL을 지정하지 않고 서버에서 새 유형의 레코드를 작성하는 데 사용됩니다 (예 : /articles /articles /23 /댓글은 201 상태 및 위치를 반환합니다 : /articles. /23/댓글/283136 헤더). 따라서 귀하의 경우 (시퀀스/AutoinCrement ID 포함) 해당 접근법을 사용합니다.

그러나 HTML (따라서 웹 양식)은 다릅니다. 삭제 및 넣지 않고 Get and Post 만 알고 있습니다. 삭제 및 업데이트 작업의 경우 게시물 메소드가 과부하됩니다.

그렇기 때문에 기본적으로 Agavi는 "쓰기"에 "쓰기"에 "읽기"를 맵핑하는 이유입니다. 가장 일반적인 사용 사례이며, "읽기"및 "쓰기"는 비교적 중립적이며 안전을 나타내기 때문에 선택되었습니다. get vs post의 측면 ( "Get는 부작용없이 호출 할 수 있습니다"및 blah에서와 같은 안전).

공장에서 Agaviwebrequest 구현에 대한 동사 매핑을 변경할 수 있습니다 .XML; 도움이 필요한 경우 Agavi 사용자 메일 링리스트 또는 IRC 채널을 참조하십시오 (또는 여기에서 물어보십시오). IRC 채널의 많은 사람들은 API를 예쁘게 만드는 데 더 많은 도움이 필요한 경우 URL 체계 설계에 상당히 경험이 있습니다.

다른 팁

생각하는 대신 PUT 만들어서 "퍼팅"으로 생각하십시오. URI에 리소스를 넣습니다 (즉, 전체 리소스를 URI에 보냅니다).

PUT http://example.com/articles/1

이를 반복하면 (동일한 전체 리소스를 동일한 URI로 보내면) 동일한 결과를 얻고 해당 URI의 리소스를 변경하지 않았습니다.

Agavi의 구현 인 경우 PUT Idempotent는 구현 중입니다 PUT 바르게. 그렇지 않으면 그렇지 않습니다.

Put은 자원이 이미 존재하거나 이미 이전에 생성 된 경우 자원을 생성하는 데 사용될 수 있습니다. 그러나 게시물은 단순한 CRUD 인 경우 리소스를 업데이트해서는 안됩니다. HTTP 동사는 단순한 CRUD 이상의 유용한 경우 특정 동작에 대한 정의 된 매핑이 없습니다.

또한이 질문은 휴식과 관련이 없습니다. 적절한 HTTP 사용법 만 있습니다. 따라서 나머지 태그를 제거하십시오.

나는 전에이 문제가 있었다. 이것은 해결할 수 있습니다 공장 변경 .xml

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top