You are not logged in. Your edit will be placed in a queue until it is peer reviewed.
We welcome edits that make the post easier to understand and more valuable for readers. Because community members review edits, please try to make the post substantially better than how you found it, for example, by fixing grammar or adding additional resources and hyperlinks.
Required fields*
- 1@del: a payment API is an excellent example, since it shows: if an API does things which may cause trouble when operations are processed twice, it usually provides an idempotency mechanism. If an API does not, but it is under your control, extend it accordingly. And if an API which is not under your control does not provide such a mechanism, it should at least have means to undo an operation and/or to validate whether an operation with a certain ID was already processed, so you can implement a retry or rollback mechanism around it by yourself.Doc Brown– Doc Brown2025-01-08 05:53:52 +00:00Commented Jan 8 at 5:53
- 1... and in case an API provides none of these things, find a better API ;-)Doc Brown– Doc Brown2025-01-08 05:55:03 +00:00Commented Jan 8 at 5:55
- 1@del: for an API of a service which does a local operation, implementing reliable idempotency for operations is pretty standard (maybe by utilizing means of a local DB, a file system with transaction logs etc). The hard part is to make this work in a distributed system - and this is what the Saga pattern is for, or the outbox pattern.Doc Brown– Doc Brown2025-01-08 06:36:51 +00:00Commented Jan 8 at 6:36
- 3Depending upon how infrequently something actually fails in production, there are sometimes cases where the most reliable, pragmatic, low-risk and cost-effective way of working around failures from a bad API is just not to do anything and fall back to human support intervention instead -- remember that software engineering also involves making pragmatic business decisions, which includes balancing the realistic time/cost of a human solution versus a potentially difficult/expensive/complex computerised one -- even if you do automate it in the end, I would at least look into the human approach.Ben Cottrell– Ben Cottrell2025-01-08 08:26:58 +00:00Commented Jan 8 at 8:26
- 1Note that practically, the payment provider will offer fault tolerance, e.g. by allowing you to check whether you already did a transaction (if they don’t, get a different provider ASAP). This technically just pushes the problem somewhere else (because payment providers also don’t do magic), but at least allows you to claim you made a reasonable effort. However, the way the question is asked this didn’t seem like a viable answer.MisterMiyagi– MisterMiyagi2025-01-08 13:05:15 +00:00Commented Jan 8 at 13:05
| Show 9 more comments
How to Edit
- Correct minor typos or mistakes
- Clarify meaning without changing it
- Add related resources or links
- Always respect the author’s intent
- Don’t use edits to reply to the author
How to Format
- create code fences with backticks ` or tildes ~ ```
like so
``` - add language identifier to highlight code ```python
def function(foo):
print(foo)
``` - put returns between paragraphs
- for linebreak add 2 spaces at end
- _italic_ or **bold**
- indent code by 4 spaces
- backtick escapes
`like _so_` - quote by placing > at start of line
- to make links (use https whenever possible) <https://example.com>[example](https://example.com)<a href="https://example.com">example</a>
How to Tag
A tag is a keyword or label that categorizes your question with other, similar questions. Choose one or more (up to 5) tags that will help answerers to find and interpret your question.
- complete the sentence: my question is about...
- use tags that describe things or concepts that are essential, not incidental to your question
- favor using existing popular tags
- read the descriptions that appear below the tag
If your question is primarily about a topic for which you can't find a tag:
- combine multiple words into single-words with hyphens (e.g. design-patterns), up to a maximum of 35 characters
- creating new tags is a privilege; if you can't yet create a tag you need, then post this question without it, then ask the community to create it for you