A little semantics thing: I’d argue that HTTP 410 and as:Tombstone are semantically equivalent, i.e.
- an
as:Tombstone
should always be served with the HTTP 410 status, and - A HTTP 410 status should be treated as a tombstone
Software unaware of tombstones will then treat it as a hard delete. “Fully” tombstone aware software can then use logic like
if (status == 200 && contentType is as2) {
// treat as normal
} else if (status == 410 && contentType is as2 && <as:Tombstone> in body.type) {
// also treat as normal
} else if (status == 410) {
// synthesize a tombstone
} else if (status == 404) {
// hard delete?
} else // existing error handling logic