2012-04-04 6 views
2

이의 나는 이런 식으로 뭔가를 보이는 메모를위한 REST 서비스를 구축하고자한다고 가정 해 봅시다 :클라이언트 측 ID 생성 전략

GET /notes/  // gives me all notes 
GET /notes/{id} // gives the note identified by {id} 
DELETE /notes/{id} // delete note 

PUT /notes/{id} // creates a new note if there is no note identified by {id} 
        // otherwise the existing note is updated 

내 서비스가 나는 PUT을 사용하고 indempotent 싶은 때문에 내 노트를 작성하고 업데이트하려면 으로 클라이언트가 새 노트 ID를 설정/생성한다는 의미입니다.

나는 GUID/UUID를 사용하려고 생각했지만 길었고 URL을 기억하기가 다소 어려웠습니다. 또한 데이터베이스 관점에서 볼 때 이러한 긴 문자열 ID는 큰 테이블에서 기본 키로 사용될 때 성능 관점에서 문제가 될 수 있습니다.

좋은 ID 생성 전략을 알고 계시다면 짧은 ID를 생성하고 물론 충돌을 피할 수 있습니까?

답변

8

는 중앙 관계형 데이터베이스 (그 문제에 대한 또는 가) 단순히 int의를 사용할 수 있지만 고도로 분산 된 시스템이 (같은 , 등) 긴 UUID를/해시를 사용하는 이유가있다. 분산 된 방식으로 클라이언트 쪽에서 간단한 ID를 생성하는 쉬운 방법은 없습니다. 서버가 처리하거나 낭비되는 ID로 살 필요가 있습니다. 일반적으로 그들은, 타임 스탬프, 클라이언트/컴퓨터 ID, 해시 컨텐츠를 인코딩 포함 등

REST 서비스는 일반적으로 응답 Location: 헤더의 출력을 사용 후 저장하고 비 나무 등을위한

POST /notes 

를 사용하는 이유

:

Location: /notes/42 
+0

확인. 그러나 응답이 없어지면 어떻게 중복 생성을 피할 수 있습니까? – Zounadire

+0

@ Zounadire : 당신은 (글쎄, 나는 몇몇 트릭이 있다고 믿을 수 없다). 일반 [tag : soap]이이를 보장하지는 않습니다. –

+0

완벽한 답변. – shashankaholic