이 주제를 처음 접하는 독자 는해야 할 일 에 대한 끝없는 토론 과 경험에서 얻은 교훈 이없는 것에 대해 놀라게 될 것입니다. REST가 SOAP보다 "선호"된다는 사실은 경험을 통한 높은 수준의 학습이지만, 거기서부터 우리가 발전 했어야한다고 생각합니까? 로이의 논문은 2000 년에있었습니다. 우리는 무엇을 개발 했습니까? 재밌었 어? 통합하기 쉬웠습니까? 지원하기 위해? 스마트 폰 및 비정상적인 모바일 연결의 증가를 처리 할 수 있습니까?
ME에 따르면 실제 네트워크는 신뢰할 수 없다. 타임 아웃을 요청합니다. 연결이 재설정됩니다. 한 번에 몇 시간 또는 며칠 동안 네트워크가 다운됩니다. 기차는 모바일 사용자와 함께 터널로 들어갑니다. 주어진 모든 요청에 대해 (이 토론에서 때때로 인정되는 바와 같이) 요청은 도중에 물에 빠지거나 응답이 물에 빠질 수 있습니다. 이러한 상황에서 실질적인 자원에 대해 직접 PUT, POST 및 DELETE 요청을 발행하는 것은 항상 조금 잔인하고 순진합니다.
HTTP는 요청-응답의 안정적인 완료를 보장하기 위해 아무 것도하지 않으며, 이는 네트워크 인식 응용 프로그램의 작업이기 때문에 괜찮습니다. 이러한 응용 프로그램을 개발하면 POST 대신 PUT을 사용하도록 후프를 건너 뛰고 중복 요청을 감지하면 서버에서 특정 종류의 오류를 발생시키는 후프를 더 많이 사용할 수 있습니다. 클라이언트로 돌아가서 이러한 오류를 해석하고 다시 가져오고, 다시 확인하고 다시 게시하려면 후프를 뛰어 넘어야합니다.
또는 이렇게 할 수 있습니다 : 안전하지 않은 요청을 임시 단일 사용자 리소스로 간주하십시오 (작업이라고 함). 클라이언트는 자원에 빈 POST가있는 실질적인 자원에 대해 새로운 "조치"를 요청합니다. POST는이 용도로만 사용됩니다. 새로 작성된 작업의 URI를 안전하게 소유하면 클라이언트는 안전하지 않은 요청을 대상 자원이 아닌 작업 URI에 PUT합니다 . 조치를 해결하고 "실제"자원을 업데이트하는 것은 API의 역할이며, 신뢰할 수없는 네트워크와 분리되어 있습니다.
서버는 비즈니스를 수행하고 응답을 리턴 하며 동의 된 조치 URI에 대해 응답 을 저장합니다 . 문제가 발생하면 클라이언트는 요청을 반복하고 (자연스러운 행동!) 서버가 이미 요청을 보았을 경우 저장된 응답을 반복하고 다른 작업은 수행하지 않습니다 .
약속을 통해 유사점을 신속하게 파악할 수 있습니다. 어떤 작업을 수행하기 전에 결과에 대한 자리 표시자를 만들고 반환합니다. 약속과 마찬가지로 동작은 한 번만 성공하거나 실패 할 수 있지만 결과는 반복적으로 가져올 수 있습니다.
무엇보다도, 우리는 송수신 애플리케이션에 고유하게 식별 된 작업을 해당 환경의 고유성과 연결할 수있는 기회를 제공합니다. 또한 고객의 책임있는 행동을 요구하고 시행 할 수 있습니다. 요청을 원하는만큼 반복하지만 기존 결과의 결정적인 결과를 얻을 때까지 새로운 조치를 취하지 마십시오.
따라서 수많은 가시적 인 문제가 사라집니다. 반복되는 삽입 요청은 중복을 생성하지 않으며 데이터를 소유 할 때까지 실제 리소스를 생성하지 않습니다. (데이터베이스 열은 널 입력 가능하지 않을 수 있습니다). 반복되는 업데이트 요청은 호환되지 않는 상태가되지 않으며 이후 변경 사항을 덮어 쓰지 않습니다. 고객은 어떤 이유로 든 (클라이언트 충돌, 응답 누락 등) 원래 확인을 (다시) 가져오고 완벽하게 처리 할 수 있습니다.
연속 삭제 요청은 404 오류를 발생시키지 않고 원래 확인을보고 처리 할 수 있습니다. 예상보다 시간이 오래 걸리면 임시로 응답 할 수 있으며 고객이 최종 결과를 다시 확인할 수있는 장소가 있습니다. 이 패턴의 가장 좋은 부분은 Kung-Fu (Panda) 속성입니다. 클라이언트가 요청 언제든지 그들이 응답을 이해하고,로 돌려없는 반복을 위해 우리는 성향을 약점을 강도를 :-)
이것이 RESTful이 아니라고 말하기 전에 REST 원칙을 존중하는 다양한 방법을 고려하십시오. 클라이언트는 URL을 구성하지 않습니다. 의미에 약간의 변화가 있지만 API는 검색 가능한 상태를 유지합니다. HTTP 동사가 적절하게 사용됩니다. 이것이 구현에 큰 변화라고 생각한다면 경험이 아니라고 말할 수 있습니다.
저장할 대량의 데이터가 있다고 생각되면 볼륨을 말해 보겠습니다. 일반적인 업데이트 확인은 킬로바이트의 일부입니다. HTTP는 현재 결정적으로 응답하는 데 1-2 분을 제공합니다. 일주일 동안 만 작업을 저장하더라도 클라이언트는 따라 잡을 기회가 충분합니다. 볼륨이 매우 큰 경우 전용 산 호환 키 값 저장소 또는 인 메모리 솔루션이 필요할 수 있습니다.