ETag와 If-Match#
Structly는 다른 사람이 먼저 저장한 변경을 모르고 덮어쓰지 않도록 수정·삭제에 ETag를 요구합니다.
- 상세 조회 응답의
etag를 확인합니다. - 수정·삭제할 때 그 값을
--if-match로 그대로 전달합니다. - 그 사이 다른 변경이 저장되었다면 요청은 거부되고 기록은 바뀌지 않습니다.
stly apis get 4pkKFh2ojXs --fields id,name{"status":200,"etag":"\"api-json3-4pkKFh2ojXs-r1\"","location":null,"data":{"id":"4pkKFh2ojXs","name":"Orders API"}}etag 값은 따옴표까지 포함한 문자열입니다. 셸에서는 작은따옴표로 감싸 전달합니다.
stly apis update 4pkKFh2ojXs --input api-update.json --if-match '"api-json3-4pkKFh2ojXs-r1"'수정 응답에는 새 ETag가 없습니다. 같은 항목을 다시 수정하려면 상세를 다시 조회해 새 etag를 받습니다.
충돌했을 때#
| 상황 | 결과 |
|---|---|
| 조회 뒤 다른 변경이 먼저 저장됨 | HTTP 412 PRECONDITION_FAILED |
--if-match 없이 수정·삭제 | stly가 요청을 보내지 않고 사용법 오류로 끝납니다 |
{"kind":"http","status":412,"error":{"code":"412.000","reason":"PRECONDITION_FAILED","message":"요청을 처리할 수 없습니다.","data":[]},"outcome":"rejected"}충돌하면 다음 순서로 처리합니다. stly와 Web UI는 자동으로 다시 저장하지 않습니다.
- 같은 항목을 다시 조회해 최신 값과 새
etag를 확인합니다. - 최신 값이 적용하려던 변경과 충돌하는지 검토합니다.
- 필요하면 입력을 최신 값에 맞게 고친 뒤 새
etag로 다시 수정합니다.
Web UI에서는 최신 값을 먼저 확인하세요. 안내가 표시되고 입력한 내용은 그대로 유지됩니다. 최신 값 조회로 저장된 값을 확인한 뒤 다시 수정합니다.
연결 집합의 ETag#
API의 제공 Service, Service의 Repository 연결, System 구성 같은 연결은 항목 자체와 별도의 ETag를 사용합니다.
연결을 바꿀 때는 연결 조회 명령의 etag를 사용합니다.
stly apis service get 4pkKFh2ojXs결과가 불명확할 때#
timeout·연결 오류로 쓰기 결과를 확인하지 못하면 stly 오류의 outcome이 unknown입니다.
요청이 반영되었을 수도 있으므로 다시 보내기 전에 같은 항목을 조회해 현재 상태를 확인합니다.