Articles

멱등수 연산이란?

소개

이 문서에서,우리는 것을 볼 수 있는 나무 등의 작업은 왜 옵션이 유용하고,우리는 볼 것 멱등에서 휴식.

멱등수 란 무엇입니까?간단히 말해서 결과를 변경하지 않고 멱등수 연산을 여러 번 수행 할 수 있습니다.또한,작업은 첫 번째 성공적인 실행 후에 부작용을 일으키지 않아야합니다.

두 가지 간단한 예를 살펴 보겠습니다.

2.1. 절대 값

절대 값을 반환하는 함수는 멱등수입니다.

하자 고려는 기능:

다음 각 항목은 다음과 같습니다.

를 들어:

에 대비하는 기능을 뒤집 등록하십시오 숫자의하지 않은 나무 등

다.

예:

2.2. 업데이트 주소

는 또 다른 실용적인 예의 멱등 작동하는 것입 업데이트에의 연락처 정보를 사용자 시스템입니다. 전화 번호 만 업데이트한다고 가정 해 봅시다. 이 업데이트의 부작용은 인증 코드가있는 문자 메시지를 새 번호로 보내는 것입니다. 우리는 세 가지 시나리오:

  • 첫 번째 메시지 업데이트를 성공적으로 처리되었음,번 업데이트 시스템에서,텍스트 메시지가 전송되었습니다. 업데이트 메시지가 다시 전송되면 아무 일도 일어나지 않습니다. 또한 문자 메시지가 두 번째로 전송되지 않습니다.
  • 첫 번째 업데이트가 실패합니다. 시스템이 업데이트되지 않고 문자 메시지가 전송되지 않습니다. 두 번째 업데이트가 성공하면 시스템이 업데이트되고 문자 메시지가 전송됩니다.
  • 첫 번째 업데이트가 실패합니다. 다른 업데이트가 전송되기 전에 사용자는 시스템에서 비활성화됩니다. 시스템 상태가 변경되었으므로 전화 번호의 두 번째 업데이트는 영향을 미치지 않습니다.

왜 멱등수?

Idempotence 는 것을 보장 같은 요청은 같은 시스템 상태,그리고 아무 작업도 실수로 실행됩니다.

예를 들어,sender S 에서 payment service PS 를 통해 receiver R.

3.1 로 돈을 보내라는 요청을 살펴 보겠습니다. 비 멱등 예

여기에 비 멱등 버전의 요청 시:

첫 번째 시도에서,S 보내는 요청을 보낼$10R.PS 메시지를 수신하지만,실제로 전송이 실패합니다. PS 는 네트워크 오류로 인해 해당 메시지를받지 못하는 s 에게 오류 메시지를 반환합니다.

S 는 전송이 성공했는지 알지 못하므로 다시 시도합니다. 이번에는 R 으로의 전송이 성공하고 PS 가 S 에 확인 메시지를 다시 보내면 확인이 실패하고 s 는 전송이 성공했는지 여부를 알 수 없습니다.

따라서 그는 세 번째로 시도합니다. PS 는 메시지를 받고 새로운 요청으로 간주하고 돈을 R 에 보내고 확인을 S 에 반환합니다.동일한 지불을 다시 시도하고 두 번 보내지 않으려 고했기 때문에 멱등수 요청이 아닙니다.

3.2. 멱등점 키

지불은 멱등점이 유용한 이유를 설명하는 좋은 예입니다. 이전 예에서,우리는 것을 본 적이 지불하는 R 여러 번 실행되기 때문에 S 은퇴이 아니라는 것을 알지 못하고 전송 이미 성공적이었다.작업이 멱등수 였다면 이것은 그렇지 않았을 것입니다. 그러나 PS 는 s 가 동일한 지불을 다시 시도했으며 s 에$10 의 두 번째 지불을 보내고 싶지 않다는 것을 어떻게 알 수 있습니까?

이를 달성하기 위해 S 는 PS 에 대한 그의 요청에 멱등점 키를 포함합니다. 이 키는 예를 들어 UUID 일 수 있습니다. PS 가 동일한 멱등수 키로 요청을 받으면 재시도라는 것을 알고 있습니다. 이전에 키를 보지 못했다면 새로운 요청이라는 것을 알고 있습니다.

살펴 봅시다 나무 등의 버전 이전 예:

여기에,최초 시도하고 첫 번째 시도에서와 같은 것 아닌 나무 등의 버전을 제외하고,요청이 포함되어 있 idempotence 키(65TH68M5 우리의 예에서).중요한 차이점은 두 번째 재시도입니다: PS 메시지를 받는 메시지와 같은 idempotence 키가 이미 성공적으로 처리되고,반 확인하 S 보내지 않고 돈 R again.여기서 멱등수의 이점은 s 가 이중 지불에 대해 걱정할 필요없이 원하는만큼 여러 번 다시 시도 할 수 있다는 것입니다. PS 지 않을 걱정할 필요가 들이 받는 확인,그는 것을 알고있 S 할 수 있는 경우에는 다시 시도 하지 않았습니다.

이 방법의 단점은 PS 가 수신 된 모든 키를 저장해야한다는 것입니다. 요청이 많지 않으면 괜찮을 수 있습니다; 그러나 요청 빈도가 매우 높으면 문제가 될 수 있습니다. 해결책은 얼마 후 멱등점 키를 만료시키는 것일 수 있습니다.

멱등점 및 휴식

4.1. 개요

자가 간단한 방법을 살펴 보 멱등 적용하는 HTTP 사는지 이해하는 것이 중요하다면 우리를 구축하고 나머지는 API 입니다. 모든 HTTP 동사에 대한 매우 상세한 참조는 RFC7231 에서 찾을 수 있습니다.

다음 표는 어떤 동사가 멱등수인지(또는 있어야하는지)보여줍니다.

4.2. 멱등수 연산

GET,HEAD 및 OPTION 은 데이터 만 읽으므로 분명히 멱등수이지만 리소스를 생성,업데이트 또는 삭제하지 않습니다.

put 은 리소스를 업데이트하거나 존재하지 않는 경우 새 리소스를 생성하므로 멱등수입니다. 동일한 업데이트를 여러 번 보낸 경우 리소스가 변경되지 않아야합니다.

4.3. 비 멱등 연산

POST 는 새 리소스를 생성하고 다시 호출하면 일반적으로 다른 리소스를 생성하므로 멱등 일 필요는 없습니다. 그러나 멱등수 연산으로도 구현될 수 있다.

패치 작업은 리소스를 부분적으로 업데이트하며 반드시 멱등수 일 필요는 없습니다. PUT 과 PATCH 의 차이점을 더 잘 이해하기 위해 예제를 살펴 보겠습니다.

온라인 상점의 장바구니에 항목을 추가하고 싶다고 가정 해 보겠습니다. 우리가 사용하는 경우,넣어 우리는 보낼 필요가 완전한 쇼핑 카트 데이터를 포함하여 모든 항목에서 이미합니다. 패치를 사용하면 추가 할 항목 만 보낼 수 있으며 이미 장바구니에있는 항목 목록에 추가됩니다.패치 요청을 다시 보내면 동일한 항목이 다시 추가됩니다. 물론 포스트에 관해서는 멱등수 패치도 구현할 수 있습니다.

4.4. HTTP 응답

이 주목하는 것이 중요 여러 번 호출하는 나무 등의 작업은 반드시 결과 같은 HTTP 응답입니다.

PUT 은 예를 들어 리소스가 생성되면 201(생성),리소스가 업데이트 된 경우 200(확인)또는 203(콘텐츠 없음)을 반환합니다.

a DELETE 는 예를 들어 실제 삭제가 발생하면 200(OK)또는 204(내용 없음)를 반환 할 수 있습니다. 이후의 모든 호출은 404(찾을 수 없음)를 반환합니다.

결론

이 문서에서,우리는 것을 보 idempotence 의미의 이점은 무엇 idempotence,그리고 어떻게 그것에 관한 것이다.

도의 일반적인 의미 idempotence 이해하기 쉬운,그것은 매우 까다로운 일이 될 수 있습을 모두 고려 미묘한 같은 부작용 및 HTTP 응답을 디자인하는 동안에는 API 입니다.